[Spice-devel] [PATCH 13/23] reuse RedPipeItem facilities for RedCursorPipeItem
Jonathon Jongsma
jjongsma at redhat.com
Tue May 17 20:04:08 UTC 2016
Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
On Mon, 2016-05-16 at 14:31 +0100, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> server/cursor-channel.c | 29 ++++++++++-------------------
> 1 file changed, 10 insertions(+), 19 deletions(-)
>
> diff --git a/server/cursor-channel.c b/server/cursor-channel.c
> index 4df5c66..2d57c59 100644
> --- a/server/cursor-channel.c
> +++ b/server/cursor-channel.c
> @@ -48,7 +48,6 @@ G_STATIC_ASSERT(sizeof(CursorItem) <=
> QXL_CURSUR_DEVICE_DATA_SIZE);
> typedef struct RedCursorPipeItem {
> RedPipeItem base;
> CursorItem *cursor_item;
> - int refs;
> } RedCursorPipeItem;
>
> struct CursorChannel {
> @@ -82,6 +81,8 @@ struct CursorChannelClient {
> #include "cache-item.tmpl.c"
> #undef CLIENT_CURSOR_CACHE
>
> +static void cursor_pipe_item_free(RedCursorPipeItem *pipe_item);
> +
> static CursorItem *cursor_item_new(QXLInstance *qxl, RedCursorCmd *cmd)
> {
> CursorItem *cursor_item;
> @@ -136,8 +137,8 @@ static RedPipeItem *new_cursor_pipe_item(RedChannelClient
> *rcc, void *data, int
> {
> RedCursorPipeItem *item = spice_malloc0(sizeof(RedCursorPipeItem));
>
> - red_pipe_item_init(&item->base, RED_PIPE_ITEM_TYPE_CURSOR);
> - item->refs = 1;
> + red_pipe_item_init_full(&item->base, RED_PIPE_ITEM_TYPE_CURSOR,
> + (GDestroyNotify)cursor_pipe_item_free);
> item->cursor_item = data;
> item->cursor_item->refs++;
> return &item->base;
> @@ -203,14 +204,9 @@ void cursor_channel_disconnect(CursorChannel
> *cursor_channel)
> }
>
>
> -static void put_cursor_pipe_item(RedCursorPipeItem *pipe_item)
> +static void cursor_pipe_item_free(RedCursorPipeItem *pipe_item)
> {
> spice_return_if_fail(pipe_item);
> - spice_return_if_fail(pipe_item->refs > 0);
> -
> - if (--pipe_item->refs) {
> - return;
> - }
>
> spice_assert(!red_pipe_item_is_linked(&pipe_item->base));
>
> @@ -232,11 +228,9 @@ static void
> cursor_channel_client_release_item_before_push(CursorChannelClient *
> RedPipeItem *item)
> {
> switch (item->type) {
> - case RED_PIPE_ITEM_TYPE_CURSOR: {
> - RedCursorPipeItem *cursor_pipe_item = SPICE_CONTAINEROF(item,
> RedCursorPipeItem, base);
> - put_cursor_pipe_item(cursor_pipe_item);
> + case RED_PIPE_ITEM_TYPE_CURSOR:
> + red_pipe_item_unref(item);
> break;
> - }
> case RED_PIPE_ITEM_TYPE_INVAL_ONE:
> case RED_PIPE_ITEM_TYPE_VERB:
> case RED_PIPE_ITEM_TYPE_CURSOR_INIT:
> @@ -252,11 +246,9 @@ static void
> cursor_channel_client_release_item_after_push(CursorChannelClient *c
> RedPipeItem *item)
> {
> switch (item->type) {
> - case RED_PIPE_ITEM_TYPE_CURSOR: {
> - RedCursorPipeItem *cursor_pipe_item = SPICE_CONTAINEROF(item,
> RedCursorPipeItem, base);
> - put_cursor_pipe_item(cursor_pipe_item);
> + case RED_PIPE_ITEM_TYPE_CURSOR:
> + red_pipe_item_unref(item);
> break;
> - }
> default:
> spice_critical("invalid item type");
> }
> @@ -384,9 +376,8 @@ static void cursor_channel_send_item(RedChannelClient
> *rcc, RedPipeItem *pipe_it
> static RedCursorPipeItem *cursor_pipe_item_ref(RedCursorPipeItem *item)
> {
> spice_return_val_if_fail(item, NULL);
> - spice_return_val_if_fail(item->refs > 0, NULL);
>
> - item->refs++;
> + red_pipe_item_ref(item);
> return item;
> }
>
More information about the Spice-devel
mailing list