Blame SOURCES/0011-xwayland-eglstream-Small-refactoring.patch

d05f4b
From 9966356963803db35997f26330fb1245777012a1 Mon Sep 17 00:00:00 2001
d05f4b
From: Olivier Fourdan <ofourdan@redhat.com>
d05f4b
Date: Thu, 15 Apr 2021 10:59:36 +0200
d05f4b
Subject: [PATCH xserver 11/27] xwayland/eglstream: Small refactoring
d05f4b
MIME-Version: 1.0
d05f4b
Content-Type: text/plain; charset=UTF-8
d05f4b
Content-Transfer-Encoding: 8bit
d05f4b
d05f4b
Some functions are called "callback" whereas they are not longer
d05f4b
callback functions or "unref" while they no longer deal with a reference
d05f4b
counter anymore, which is quite confusing. Rename those functions to be
d05f4b
more explicit.
d05f4b
d05f4b
Also, the pending streams can be destroyed in different places, move the
d05f4b
common code to separate function to avoid duplicating code and help with
d05f4b
readability of the code.
d05f4b
d05f4b
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
d05f4b
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
d05f4b
(cherry picked from commit 823f3254fabd16e5e721da57cd260beac9b8f8bd)
d05f4b
---
d05f4b
 hw/xwayland/xwayland-glamor-eglstream.c | 42 ++++++++++++++-----------
d05f4b
 1 file changed, 24 insertions(+), 18 deletions(-)
d05f4b
d05f4b
diff --git a/hw/xwayland/xwayland-glamor-eglstream.c b/hw/xwayland/xwayland-glamor-eglstream.c
d05f4b
index 64fe93b7c..9abb7b779 100644
d05f4b
--- a/hw/xwayland/xwayland-glamor-eglstream.c
d05f4b
+++ b/hw/xwayland/xwayland-glamor-eglstream.c
d05f4b
@@ -287,7 +287,7 @@ xwl_glamor_egl_device_has_egl_extensions(void *device,
d05f4b
 }
d05f4b
 
d05f4b
 static void
d05f4b
-xwl_eglstream_unref_pixmap_stream(struct xwl_pixmap *xwl_pixmap)
d05f4b
+xwl_eglstream_destroy_pixmap_stream(struct xwl_pixmap *xwl_pixmap)
d05f4b
 {
d05f4b
     struct xwl_screen *xwl_screen = xwl_pixmap->xwl_screen;
d05f4b
 
d05f4b
@@ -319,7 +319,17 @@ xwl_eglstream_unref_pixmap_stream(struct xwl_pixmap *xwl_pixmap)
d05f4b
 }
d05f4b
 
d05f4b
 static void
d05f4b
-xwl_glamor_eglstream_del_pending_stream_cb(struct xwl_pixmap *xwl_pixmap)
d05f4b
+xwl_glamor_eglstream_destroy_pending_stream(struct xwl_eglstream_pending_stream *pending)
d05f4b
+{
d05f4b
+    if (pending->cb)
d05f4b
+        wl_callback_destroy(pending->cb);
d05f4b
+    xwl_eglstream_window_set_pending(pending->window, NULL);
d05f4b
+    xorg_list_del(&pending->link);
d05f4b
+    free(pending);
d05f4b
+}
d05f4b
+
d05f4b
+static void
d05f4b
+xwl_glamor_eglstream_remove_pending_stream(struct xwl_pixmap *xwl_pixmap)
d05f4b
 {
d05f4b
     struct xwl_eglstream_private *xwl_eglstream =
d05f4b
         xwl_eglstream_get(xwl_pixmap->xwl_screen);
d05f4b
@@ -328,10 +338,7 @@ xwl_glamor_eglstream_del_pending_stream_cb(struct xwl_pixmap *xwl_pixmap)
d05f4b
     xorg_list_for_each_entry(pending,
d05f4b
                              &xwl_eglstream->pending_streams, link) {
d05f4b
         if (pending->xwl_pixmap == xwl_pixmap) {
d05f4b
-            wl_callback_destroy(pending->cb);
d05f4b
-            xwl_eglstream_window_set_pending(pending->window, NULL);
d05f4b
-            xorg_list_del(&pending->link);
d05f4b
-            free(pending);
d05f4b
+            xwl_glamor_eglstream_destroy_pending_stream(pending);
d05f4b
             break;
d05f4b
         }
d05f4b
     }
d05f4b
@@ -343,9 +350,9 @@ xwl_glamor_eglstream_destroy_pixmap(PixmapPtr pixmap)
d05f4b
     struct xwl_pixmap *xwl_pixmap = xwl_pixmap_get(pixmap);
d05f4b
 
d05f4b
     if (xwl_pixmap && pixmap->refcnt == 1) {
d05f4b
-        xwl_glamor_eglstream_del_pending_stream_cb(xwl_pixmap);
d05f4b
+        xwl_glamor_eglstream_remove_pending_stream(xwl_pixmap);
d05f4b
+        xwl_eglstream_destroy_pixmap_stream(xwl_pixmap);
d05f4b
         xwl_pixmap_del_buffer_release_cb(pixmap);
d05f4b
-        xwl_eglstream_unref_pixmap_stream(xwl_pixmap);
d05f4b
     }
d05f4b
     return glamor_destroy_pixmap(pixmap);
d05f4b
 }
d05f4b
@@ -432,8 +439,6 @@ xwl_eglstream_consumer_ready_callback(void *data,
d05f4b
     struct xwl_eglstream_pending_stream *pending;
d05f4b
     Bool found = FALSE;
d05f4b
 
d05f4b
-    wl_callback_destroy(callback);
d05f4b
-
d05f4b
     xorg_list_for_each_entry(pending, &xwl_eglstream->pending_streams, link) {
d05f4b
         if (pending->cb == callback) {
d05f4b
             found = TRUE;
d05f4b
@@ -442,8 +447,11 @@ xwl_eglstream_consumer_ready_callback(void *data,
d05f4b
     }
d05f4b
     assert(found);
d05f4b
 
d05f4b
+    wl_callback_destroy(callback);
d05f4b
+    pending->cb = NULL;
d05f4b
+
d05f4b
     if (!pending->is_valid) {
d05f4b
-        xwl_eglstream_unref_pixmap_stream(pending->xwl_pixmap);
d05f4b
+        xwl_eglstream_destroy_pixmap_stream(pending->xwl_pixmap);
d05f4b
         goto out;
d05f4b
     }
d05f4b
 
d05f4b
@@ -462,9 +470,7 @@ xwl_eglstream_consumer_ready_callback(void *data,
d05f4b
            pending->window->drawable.id, pending->pixmap);
d05f4b
 
d05f4b
 out:
d05f4b
-    xwl_eglstream_window_set_pending(pending->window, NULL);
d05f4b
-    xorg_list_del(&pending->link);
d05f4b
-    free(pending);
d05f4b
+    xwl_glamor_eglstream_destroy_pending_stream(pending);
d05f4b
 }
d05f4b
 
d05f4b
 static const struct wl_callback_listener consumer_ready_listener = {
d05f4b
@@ -514,8 +520,8 @@ static const struct wl_buffer_listener xwl_eglstream_buffer_release_listener = {
d05f4b
 };
d05f4b
 
d05f4b
 static void
d05f4b
-xwl_eglstream_create_pending_stream(struct xwl_screen *xwl_screen,
d05f4b
-                                    WindowPtr window, PixmapPtr pixmap)
d05f4b
+xwl_eglstream_create_pixmap_and_stream(struct xwl_screen *xwl_screen,
d05f4b
+                                       WindowPtr window, PixmapPtr pixmap)
d05f4b
 {
d05f4b
     struct xwl_eglstream_private *xwl_eglstream =
d05f4b
         xwl_eglstream_get(xwl_screen);
d05f4b
@@ -599,8 +605,8 @@ xwl_glamor_eglstream_allow_commits(struct xwl_window *xwl_window)
d05f4b
     /* Glamor pixmap has no backing stream yet; begin making one and disallow
d05f4b
      * commits until then
d05f4b
      */
d05f4b
-    xwl_eglstream_create_pending_stream(xwl_screen, xwl_window->window,
d05f4b
-                                        pixmap);
d05f4b
+    xwl_eglstream_create_pixmap_and_stream(xwl_screen, xwl_window->window,
d05f4b
+                                           pixmap);
d05f4b
 
d05f4b
     return FALSE;
d05f4b
 }
d05f4b
-- 
d05f4b
2.31.1
d05f4b