[Spice-devel] [PATCH spice-server 6/6] Move display field from Drawable to _Drawable (pool object)

Frediano Ziglio fziglio at redhat.com
Fri Dec 8 15:55:24 UTC 2017


This pointer is used only to maintain the pool.
There is no reason to expose this to the other objects.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 server/display-channel-private.h | 1 +
 server/display-channel.c         | 7 ++-----
 server/display-channel.h         | 1 -
 3 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/server/display-channel-private.h b/server/display-channel-private.h
index 617ce30d..ff3dde30 100644
--- a/server/display-channel-private.h
+++ b/server/display-channel-private.h
@@ -69,6 +69,7 @@ struct _Drawable {
         Drawable drawable;
         _Drawable *next;
     } u;
+    DisplayChannel *display;
 };
 
 struct DisplayChannelPrivate
diff --git a/server/display-channel.c b/server/display-channel.c
index 899df42c..9ac9c5c5 100644
--- a/server/display-channel.c
+++ b/server/display-channel.c
@@ -1594,6 +1594,7 @@ static Drawable* drawable_try_new(DisplayChannel *display)
     if (!display->priv->free_drawables)
         return NULL;
 
+    display->priv->free_drawables->display = display;
     drawable = &display->priv->free_drawables->u.drawable;
     display->priv->free_drawables = display->priv->free_drawables->u.next;
     display->priv->drawable_count++;
@@ -1633,10 +1634,6 @@ static Drawable *display_channel_drawable_try_new(DisplayChannel *display,
     }
 
     bzero(drawable, sizeof(Drawable));
-    /* Pointer to the display from which the drawable is allocated.  This
-     * pointer is safe to be retained as DisplayChannel lifespan is bigger than
-     * all drawables.  */
-    drawable->display = display;
     drawable->refs = 1;
     drawable->creation_time = drawable->first_frame_time = spice_get_monotonic_time_ns();
     ring_item_init(&drawable->list_link);
@@ -1688,7 +1685,7 @@ static void drawable_unref_surface_deps(DisplayChannel *display, Drawable *drawa
 
 void drawable_unref(Drawable *drawable)
 {
-    DisplayChannel *display = drawable->display;
+    DisplayChannel *display = SPICE_CONTAINEROF(drawable, _Drawable, u.drawable)->display;
 
     if (--drawable->refs != 0)
         return;
diff --git a/server/display-channel.h b/server/display-channel.h
index e26d2ba1..04c4f3d5 100644
--- a/server/display-channel.h
+++ b/server/display-channel.h
@@ -104,7 +104,6 @@ struct Drawable {
     int surface_deps[3];
 
     uint32_t process_commands_generation;
-    DisplayChannel *display;
 };
 
 DisplayChannel*            display_channel_new                       (RedsState *reds,
-- 
2.14.3



More information about the Spice-devel mailing list