|
|
88270d |
From 1466a4fdfa8156dd4fd8b6ee6acd1b44f72ee3b1 Mon Sep 17 00:00:00 2001
|
|
|
88270d |
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
|
|
88270d |
Date: Fri, 19 Jun 2020 18:10:18 +0200
|
|
|
88270d |
Subject: [PATCH xserver 4/4] xwayland: Free all remaining events in
|
|
|
88270d |
xwl_present_cleanup
|
|
|
88270d |
MIME-Version: 1.0
|
|
|
88270d |
Content-Type: text/plain; charset=UTF-8
|
|
|
88270d |
Content-Transfer-Encoding: 8bit
|
|
|
88270d |
|
|
|
88270d |
At the end of xwl_present_cleanup, these events aren't reachable
|
|
|
88270d |
anymore, so if we don't free them first, they're leaked.
|
|
|
88270d |
|
|
|
88270d |
(cherry picked from commit 64565ea344fef0171497952ef75f019cb420fe3b)
|
|
|
88270d |
|
|
|
88270d |
v2:
|
|
|
88270d |
* Simpler backport, no need to keep a reference to the pixmap on the
|
|
|
88270d |
1.20 branch.
|
|
|
88270d |
|
|
|
88270d |
Signed-off-by: Michel Dänzer <mdaenzer@redhat.com>
|
|
|
88270d |
---
|
|
|
88270d |
hw/xwayland/xwayland-present.c | 26 +++++++++++---------------
|
|
|
88270d |
1 file changed, 11 insertions(+), 15 deletions(-)
|
|
|
88270d |
|
|
|
88270d |
diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c
|
|
|
88270d |
index 492e4a876..2cec63f59 100644
|
|
|
88270d |
--- a/hw/xwayland/xwayland-present.c
|
|
|
88270d |
+++ b/hw/xwayland/xwayland-present.c
|
|
|
88270d |
@@ -114,6 +114,12 @@ xwl_present_reset_timer(struct xwl_present_window *xwl_present_window)
|
|
|
88270d |
static void
|
|
|
88270d |
xwl_present_free_event(struct xwl_present_event *event)
|
|
|
88270d |
{
|
|
|
88270d |
+ if (!event)
|
|
|
88270d |
+ return;
|
|
|
88270d |
+
|
|
|
88270d |
+ if (event->buffer)
|
|
|
88270d |
+ wl_buffer_set_user_data(event->buffer, NULL);
|
|
|
88270d |
+
|
|
|
88270d |
xorg_list_del(&event->list);
|
|
|
88270d |
free(event);
|
|
|
88270d |
}
|
|
|
88270d |
@@ -138,21 +144,10 @@ xwl_present_cleanup(WindowPtr window)
|
|
|
88270d |
xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->event_list, list)
|
|
|
88270d |
xwl_present_free_event(event);
|
|
|
88270d |
|
|
|
88270d |
- /* Clear remaining buffer releases and inform Present about free ressources */
|
|
|
88270d |
- event = xwl_present_window->sync_flip;
|
|
|
88270d |
- xwl_present_window->sync_flip = NULL;
|
|
|
88270d |
- if (event) {
|
|
|
88270d |
- if (event->buffer_released) {
|
|
|
88270d |
- xwl_present_free_event(event);
|
|
|
88270d |
- } else {
|
|
|
88270d |
- event->pending = FALSE;
|
|
|
88270d |
- event->abort = TRUE;
|
|
|
88270d |
- }
|
|
|
88270d |
- }
|
|
|
88270d |
- xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->release_queue, list) {
|
|
|
88270d |
- xorg_list_del(&event->list);
|
|
|
88270d |
- event->abort = TRUE;
|
|
|
88270d |
- }
|
|
|
88270d |
+ xwl_present_free_event(xwl_present_window->sync_flip);
|
|
|
88270d |
+
|
|
|
88270d |
+ xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->release_queue, list)
|
|
|
88270d |
+ xwl_present_free_event(event);
|
|
|
88270d |
|
|
|
88270d |
/* Clear timer */
|
|
|
88270d |
xwl_present_free_timer(xwl_present_window);
|
|
|
88270d |
@@ -353,6 +348,7 @@ xwl_present_queue_vblank(WindowPtr present_window,
|
|
|
88270d |
return BadAlloc;
|
|
|
88270d |
|
|
|
88270d |
event->event_id = event_id;
|
|
|
88270d |
+ event->buffer = NULL;
|
|
|
88270d |
event->xwl_present_window = xwl_present_window;
|
|
|
88270d |
event->target_msc = msc;
|
|
|
88270d |
|
|
|
88270d |
--
|
|
|
88270d |
2.26.2
|
|
|
88270d |
|