hrm. I guess I'm not strongly opposed, but I don't see this as a big improvement. I dislike the way this 'pool' is implemented in general, and I don't think this makes it much cleaner. I think I disagree with the statement that "the pointer is only used to maintain the pool". It is also used to notify the channel that the drawable has been freed so that it can clean up dependent objects, etc. Those things would need to be done whether the object was allocated from a pool or allocated dynamically, I think. It also means adding more SPICE_CONTAINER_OF() stuff which I don't really like. Reviewed-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> On Fri, 2017-12-08 at 15:55 +0000, Frediano Ziglio wrote: > 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@xxxxxxxxxx> > --- > 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, _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel