summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2016-04-14 15:22:59 -0500
committerJonathon Jongsma <jjongsma@redhat.com>2016-04-15 09:59:08 -0500
commit889a0b880f359cefc1fe07ed9256a9463fc7a749 (patch)
treeb28b848d74ac0eff3c3e99071fb791a854f675c9
parent3bd6b215d382c62a919ef5ab9c32cc9cc32f65e4 (diff)
DrawablePipeItem: use base class for refcounting
Since PipeItem already implements refcounting, there's no need to re-implement it here.
-rw-r--r--server/dcc.c26
-rw-r--r--server/dcc.h3
-rw-r--r--server/display-channel.c6
3 files changed, 11 insertions, 24 deletions
diff --git a/server/dcc.c b/server/dcc.c
index 4e450b5d..234246fb 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -274,20 +274,14 @@ static void add_drawable_surface_images(DisplayChannelClient *dcc, Drawable *dra
dcc_push_surface_image(dcc, drawable->surface_id);
}
-DrawablePipeItem *drawable_pipe_item_ref(DrawablePipeItem *dpi)
-{
- dpi->refs++;
- return dpi;
-}
-
-void drawable_pipe_item_unref(DrawablePipeItem *dpi)
+void drawable_pipe_item_free(PipeItem *item)
{
+ DrawablePipeItem *dpi = SPICE_CONTAINEROF(item, DrawablePipeItem, dpi_pipe_item);
DisplayChannel *display = DCC_TO_DC(dpi->dcc);
- if (--dpi->refs != 0)
- return;
+ spice_assert(item->refcount == 0);
- spice_warn_if_fail(!ring_item_is_linked(&dpi->dpi_pipe_item.link));
+ spice_warn_if_fail(!ring_item_is_linked(&item->link));
spice_warn_if_fail(!ring_item_is_linked(&dpi->base));
display_channel_drawable_unref(display, dpi->drawable);
free(dpi);
@@ -302,8 +296,8 @@ static DrawablePipeItem *drawable_pipe_item_new(DisplayChannelClient *dcc, Drawa
dpi->dcc = dcc;
ring_item_init(&dpi->base);
ring_add(&drawable->pipes, &dpi->base);
- pipe_item_init(&dpi->dpi_pipe_item, PIPE_ITEM_TYPE_DRAW);
- dpi->refs++;
+ pipe_item_init_full(&dpi->dpi_pipe_item, PIPE_ITEM_TYPE_DRAW,
+ (GDestroyNotify)drawable_pipe_item_free);
drawable->refs++;
return dpi;
}
@@ -1606,7 +1600,8 @@ static void release_item_after_push(DisplayChannelClient *dcc, PipeItem *item)
switch (item->type) {
case PIPE_ITEM_TYPE_DRAW:
- drawable_pipe_item_unref(SPICE_CONTAINEROF(item, DrawablePipeItem, dpi_pipe_item));
+ case PIPE_ITEM_TYPE_IMAGE:
+ pipe_item_unref(item);
break;
case PIPE_ITEM_TYPE_STREAM_CLIP:
stream_clip_item_unref(dcc, (StreamClipItem *)item);
@@ -1614,9 +1609,6 @@ static void release_item_after_push(DisplayChannelClient *dcc, PipeItem *item)
case PIPE_ITEM_TYPE_UPGRADE:
upgrade_item_unref(display, (UpgradeItem *)item);
break;
- case PIPE_ITEM_TYPE_IMAGE:
- pipe_item_unref(item);
- break;
case PIPE_ITEM_TYPE_GL_SCANOUT:
case PIPE_ITEM_TYPE_GL_DRAW:
case PIPE_ITEM_TYPE_VERB:
@@ -1645,7 +1637,7 @@ static void release_item_before_push(DisplayChannelClient *dcc, PipeItem *item)
case PIPE_ITEM_TYPE_DRAW: {
DrawablePipeItem *dpi = SPICE_CONTAINEROF(item, DrawablePipeItem, dpi_pipe_item);
ring_remove(&dpi->base);
- drawable_pipe_item_unref(dpi);
+ pipe_item_unref(item);
break;
}
case PIPE_ITEM_TYPE_STREAM_CREATE: {
diff --git a/server/dcc.h b/server/dcc.h
index 3d7870b1..e8354e29 100644
--- a/server/dcc.h
+++ b/server/dcc.h
@@ -157,9 +157,6 @@ typedef struct DrawablePipeItem {
uint8_t refs;
} DrawablePipeItem;
-void drawable_pipe_item_unref (DrawablePipeItem *dpi);
-DrawablePipeItem* drawable_pipe_item_ref (DrawablePipeItem *dpi);
-
DisplayChannelClient* dcc_new (DisplayChannel *display,
RedClient *client,
RedsStream *stream,
diff --git a/server/display-channel.c b/server/display-channel.c
index ac107245..4d339f5b 100644
--- a/server/display-channel.c
+++ b/server/display-channel.c
@@ -1971,7 +1971,8 @@ static void hold_item(RedChannelClient *rcc, PipeItem *item)
switch (item->type) {
case PIPE_ITEM_TYPE_DRAW:
- drawable_pipe_item_ref(SPICE_CONTAINEROF(item, DrawablePipeItem, dpi_pipe_item));
+ case PIPE_ITEM_TYPE_IMAGE:
+ pipe_item_ref(item);
break;
case PIPE_ITEM_TYPE_STREAM_CLIP:
((StreamClipItem *)item)->refs++;
@@ -1979,9 +1980,6 @@ static void hold_item(RedChannelClient *rcc, PipeItem *item)
case PIPE_ITEM_TYPE_UPGRADE:
((UpgradeItem *)item)->refs++;
break;
- case PIPE_ITEM_TYPE_IMAGE:
- pipe_item_ref(item);
- break;
default:
spice_warn_if_reached();
}