On Fri, 2016-04-15 at 05:58 -0400, Frediano Ziglio wrote: > > > > Since the base class now implements refcounting, there's no need to > > re-invent it here. > > --- > > server/dcc-send.c | 4 ++-- > > server/dcc.c | 19 +++++-------------- > > server/dcc.h | 3 +-- > > server/display-channel.c | 2 +- > > 4 files changed, 9 insertions(+), 19 deletions(-) > > > > diff --git a/server/dcc-send.c b/server/dcc-send.c > > index eb866cf..b8d1157 100644 > > --- a/server/dcc-send.c > > +++ b/server/dcc-send.c > > @@ -728,7 +728,7 @@ static void > > red_pipe_replace_rendered_drawables_with_images(DisplayChannelClient > > > > spice_assert(image); > > red_channel_client_pipe_remove_and_release(RED_CHANNEL_CLIENT(dcc), > > &dpi->dpi_pipe_item); > > - pipe_item = &image->link; > > + pipe_item = &image->base; > > } > > } > > > > @@ -1949,7 +1949,7 @@ static void red_marshall_image(RedChannelClient *rcc, > > SpiceMarshaller *m, ImageI > > chunks = spice_chunks_new_linear(item->data, bitmap.stride * bitmap.y); > > bitmap.data = chunks; > > > > - red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_DRAW_COPY, > > &item->link); > > + red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_DRAW_COPY, > > &item->base); > > > > copy.base.surface_id = item->surface_id; > > copy.base.box.left = item->pos.x; > > diff --git a/server/dcc.c b/server/dcc.c > > index c952042..4e450b5 100644 > > --- a/server/dcc.c > > +++ b/server/dcc.c > > @@ -184,9 +184,8 @@ ImageItem > > *dcc_add_surface_area_image(DisplayChannelClient *dcc, int surface_id, > > > > item = (ImageItem *)spice_malloc_n_m(height, stride, > > sizeof(ImageItem)); > > > > - pipe_item_init(&item->link, PIPE_ITEM_TYPE_IMAGE); > > + pipe_item_init(&item->base, PIPE_ITEM_TYPE_IMAGE); > > > > - item->refs = 1; > > item->surface_id = surface_id; > > item->image_format = > > spice_bitmap_from_surface_type(surface->context.format); > > @@ -214,9 +213,9 @@ ImageItem > > *dcc_add_surface_area_image(DisplayChannelClient *dcc, int surface_id, > > } > > > > if (pos) { > > - red_channel_client_pipe_add_after(RED_CHANNEL_CLIENT(dcc), > > &item->link, pos); > > + red_channel_client_pipe_add_after(RED_CHANNEL_CLIENT(dcc), > > &item->base, pos); > > } else { > > - red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &item->link); > > + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &item->base); > > } > > > > return item; > > @@ -1591,14 +1590,6 @@ int dcc_handle_migrate_data(DisplayChannelClient > > *dcc, > > uint32_t size, void *mess > > return TRUE; > > } > > > > -static void image_item_unref(ImageItem *item) > > -{ > > - if (--item->refs != 0) > > - return; > > - > > - free(item); > > -} > > - > > static void upgrade_item_unref(DisplayChannel *display, UpgradeItem *item) > > { > > if (--item->refs != 0) > > @@ -1624,7 +1615,7 @@ static void > > release_item_after_push(DisplayChannelClient *dcc, PipeItem *item) > > upgrade_item_unref(display, (UpgradeItem *)item); > > break; > > case PIPE_ITEM_TYPE_IMAGE: > > - image_item_unref((ImageItem *)item); > > + pipe_item_unref(item); > > break; > > case PIPE_ITEM_TYPE_GL_SCANOUT: > > case PIPE_ITEM_TYPE_GL_DRAW: > > @@ -1674,7 +1665,7 @@ static void > > release_item_before_push(DisplayChannelClient *dcc, PipeItem *item) > > upgrade_item_unref(display, (UpgradeItem *)item); > > break; > > case PIPE_ITEM_TYPE_IMAGE: > > - image_item_unref((ImageItem *)item); > > + pipe_item_unref(item); > > break; > > case PIPE_ITEM_TYPE_CREATE_SURFACE: { > > SurfaceCreateItem *surface_create = SPICE_CONTAINEROF(item, > > SurfaceCreateItem, > > diff --git a/server/dcc.h b/server/dcc.h > > index 071a9fc..3d7870b 100644 > > --- a/server/dcc.h > > +++ b/server/dcc.h > > @@ -136,8 +136,7 @@ typedef struct GlDrawItem { > > } GlDrawItem; > > > > typedef struct ImageItem { > > - PipeItem link; > > - int refs; > > + PipeItem base; > > SpicePoint pos; > > int width; > > int height; > > diff --git a/server/display-channel.c b/server/display-channel.c > > index a6d90cf..ac10724 100644 > > --- a/server/display-channel.c > > +++ b/server/display-channel.c > > @@ -1980,7 +1980,7 @@ static void hold_item(RedChannelClient *rcc, PipeItem > > *item) > > ((UpgradeItem *)item)->refs++; > > break; > > Why not these ? You mean the UpgradeItem ref? That's handled in patch 8. > > > case PIPE_ITEM_TYPE_IMAGE: > > - ((ImageItem *)item)->refs++; > > + pipe_item_ref(item); > > break; > > default: > > spice_warn_if_reached(); > > Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel