[Spice-devel] [PATCH 06/11] server: move some cursor code to cursor-channel.c

Frediano Ziglio fziglio at redhat.com
Thu Oct 29 05:53:15 PDT 2015


> 
> On 10/28/2015 06:07 PM, Frediano Ziglio wrote:
> >
> >>
> >> From: Marc-André Lureau <marcandre.lureau at gmail.com>
> >>
> >> Also fix warning due to unexpected pipe item type
> >>
> >> The specific item type that was not being handled was
> >> PIPE_ITEM_TYPE_INVAL_ONE (#102). This item type is used by the cursor
> >> channel, but the analogous item for the display channel is
> >> PIPE_ITEM_TYPE_INVAL_PALETTE_CACHE. Use this value instead.
> >>
> >> The exact warning follows:
> >>
> >>      (/usr/bin/qemu-kvm:24458): Spice-Warning **:
> >>      ../../server/dcc-send.c:2442:dcc_send_item: should not be reached
> >>      (/usr/bin/qemu-kvm:24458): Spice-CRITICAL **:
> >>      ../../server/dcc.c:1595:release_item_before_push: invalid item type
> >>
> >> Author:    Marc-André Lureau <marcandre.lureau at gmail.com>
> >> Date:      Thu Feb 27 19:38:58 2014 +0200
> >> ---
> >>   server/cache_item.tmpl.c |   4 +-
> >>   server/cursor-channel.c  | 219
> >>   ++++++++++++++++++++++++++---------------------
> >>   server/cursor-channel.h  |  27 +++---
> >>   server/red_dispatcher.c  |   1 +
> >>   server/red_worker.c      | 200
> >>   +++++++++++++++++++------------------------
> >>   server/red_worker.h      |  65 +++++---------
> >>   6 files changed, 255 insertions(+), 261 deletions(-)
> >>
> >> diff --git a/server/cache_item.tmpl.c b/server/cache_item.tmpl.c
> >> index dc314c0..ad2b579 100644
> >> --- a/server/cache_item.tmpl.c
> >> +++ b/server/cache_item.tmpl.c
> >> @@ -21,6 +21,7 @@
> >>   #define CACHE_HASH_KEY CURSOR_CACHE_HASH_KEY
> >>   #define CACHE_HASH_SIZE CURSOR_CACHE_HASH_SIZE
> >>   #define CACHE_INVAL_TYPE SPICE_MSG_CURSOR_INVAL_ONE
> >> +#define PIPE_ITEM_TYPE PIPE_ITEM_TYPE_INVAL_ONE
> >
> > I would prefer a PIPE_ITEM_TYPE_INVALID macro here.
> > Is not clear which part of the patch is fixing the "unexpected pipe item
> > type".
> 
> I think both are ok.
>

Was mainly style, the macro is used just here.

> >
> >>   #define FUNC_NAME(name) red_cursor_cache_##name
> >>   #define VAR_NAME(name) cursor_cache_##name
> >>   #define CHANNEL CursorChannel
> >> @@ -32,6 +33,7 @@
> >>   #define CACHE_HASH_KEY PALETTE_CACHE_HASH_KEY
> >>   #define CACHE_HASH_SIZE PALETTE_CACHE_HASH_SIZE
> >>   #define CACHE_INVAL_TYPE SPICE_MSG_DISPLAY_INVAL_PALETTE
> >> +#define PIPE_ITEM_TYPE PIPE_ITEM_TYPE_INVAL_PALETTE_CACHE
> 
> This line fixes the "unexpected pipe item type".
> 

Oh, fine. Why was never discovered before? Is it fixing something?

> >>   #define FUNC_NAME(name) red_palette_cache_##name
> >>   #define VAR_NAME(name) palette_cache_##name
> >>   #define CHANNEL DisplayChannel
> >> @@ -78,7 +80,7 @@ static void FUNC_NAME(remove)(CHANNELCLIENT
> >> *channel_client, CacheItem *item)
> >>       channel_client->VAR_NAME(items)--;
> >>       channel_client->VAR_NAME(available) += item->size;
> >>
> >> -    red_channel_pipe_item_init(&channel->common.base, &item->u.pipe_data,
> >> PIPE_ITEM_TYPE_INVAL_ONE);
> >> +    red_channel_pipe_item_init(&channel->common.base, &item->u.pipe_data,
> >> PIPE_ITEM_TYPE);
> >>       red_channel_client_pipe_add_tail(&channel_client->common.base,
> >>       &item->u.pipe_data); // for now
> >>   }
> >>
> >> diff --git a/server/cursor-channel.c b/server/cursor-channel.c
> >> index 7ba4a7d..adf7d78 100644
> >> --- a/server/cursor-channel.c
> >> +++ b/server/cursor-channel.c
> >> @@ -25,57 +25,64 @@
> >>   #include "cache_item.tmpl.c"
> >>   #undef CLIENT_CURSOR_CACHE
> >>
> >> -static inline CursorItem *alloc_cursor_item(void)
> >> +CursorItem *cursor_item_new(QXLInstance *qxl, RedCursorCmd *cmd, uint32_t
> >> group_id)
> >>   {
> >>       CursorItem *cursor_item;
> >>
> >> +    spice_return_val_if_fail(cmd != NULL, NULL);
> >> +
> >>       cursor_item = g_slice_new0(CursorItem);
> >> +    cursor_item->qxl = qxl;
> >>       cursor_item->refs = 1;
> >> +    cursor_item->group_id = group_id;
> >> +    cursor_item->red_cursor = cmd;
> >>
> >>       return cursor_item;
> >>   }
> >>
> >> -CursorItem *cursor_item_new(RedCursorCmd *cmd, uint32_t group_id)
> >> +CursorItem *cursor_item_ref(CursorItem *item)
> >>   {
> >> -    CursorItem *cursor_item;
> >> +    spice_return_val_if_fail(item != NULL, NULL);
> >> +    spice_return_val_if_fail(item->refs > 0, NULL);
> >
> > This is detecting a memory error, perhaps a spice_error or a spice_critical
> > should be better.
> >
> >>
> >> -    spice_return_val_if_fail(cmd != NULL, NULL);
> >> -    spice_warn_if(!(cursor_item = alloc_cursor_item()));
> >> -
> >> -    cursor_item->group_id = group_id;
> >> -    cursor_item->red_cursor = cmd;
> >> +    item->refs++;
> >>
> >> -    return cursor_item;
> >> +    return item;
> >>   }
> >>
> >> -void cursor_item_unref(QXLInstance *qxl, CursorItem *cursor)
> >> +void cursor_item_unref(CursorItem *item)
> >>   {
> >> -    if (!--cursor->refs) {
> >> -        QXLReleaseInfoExt release_info_ext;
> >> -        RedCursorCmd *cursor_cmd;
> >> -
> >> -        cursor_cmd = cursor->red_cursor;
> >> -        release_info_ext.group_id = cursor->group_id;
> >> -        release_info_ext.info = cursor_cmd->release_info;
> >> -        qxl->st->qif->release_resource(qxl, release_info_ext);
> >> -        red_put_cursor_cmd(cursor_cmd);
> >> -        free(cursor_cmd);
> >> -
> >> -        g_slice_free(CursorItem, cursor);
> >> -    }
> >> +    QXLReleaseInfoExt release_info_ext;
> >> +    RedCursorCmd *cursor_cmd;
> >> +
> >> +    spice_return_if_fail(item != NULL);
> >> +
> >> +    if (--item->refs)
> >> +        return;
> >> +
> >> +    cursor_cmd = item->red_cursor;
> >> +    release_info_ext.group_id = item->group_id;
> >> +    release_info_ext.info = cursor_cmd->release_info;
> >> +    item->qxl->st->qif->release_resource(item->qxl, release_info_ext);
> >> +    red_put_cursor_cmd(cursor_cmd);
> >> +    free(cursor_cmd);
> >> +
> >> +    g_slice_free(CursorItem, item);
> >> +
> >>   }
> >>
> >
> > There are a lot of renames cursor_channel -> cursor and cursor -> item
> > (here
> > and in following hunks). Should we remove them ?
> > Which naming should we use ?
> 
> I like cursor_channel better than cursor (or maybe even just channel).
> I like cursor_item    better than cursor (or maybe just item).
> 
> 
> I like a patch that says "move some code" to only
> move code and not change code that is moved.
> I think this patch should be split.
> 
> - Uri.
> 

This was done (see previous patch already pushed). The only think left is to change
the commit message.
I personally vote for cursor_channel too instead of just cursor (I think was like this
before this patch). About cursors I would prefer cursor_item.

Frediano


More information about the Spice-devel mailing list