[Spice-devel] [PATCH spice-server v2 6/6] cursor-channel: Use a single RedCursorPipeItem to hold the cursor

Christophe Fergeau cfergeau at redhat.com
Mon Sep 4 14:16:45 UTC 2017


On Mon, Sep 04, 2017 at 12:02:10PM +0100, Frediano Ziglio wrote:
> RedPipeItem already implements reference counting so
> this avoid duplicating code to handle a object with reference
> counting that points to another object with reference counting
> that holds a RedCursorCmd.

Acked-by: Christophe Fergeau <cfergeau at redhat.com>
Looks good to me apart from one minor comment below


> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/cursor-channel.c | 107 +++++++++++++++---------------------------------
>  1 file changed, 33 insertions(+), 74 deletions(-)
> 
> diff --git a/server/cursor-channel.c b/server/cursor-channel.c
> index 2441e1ed..2efa6ef4 100644
> --- a/server/cursor-channel.c
> +++ b/server/cursor-channel.c
> @@ -28,17 +28,17 @@
>  #include "reds.h"
>  #include "red-qxl.h"
>  
> -typedef struct CursorItem {
> +typedef struct RedCursorPipeItem {
> +    RedPipeItem base;
>      QXLInstance *qxl;
> -    int refs;
>      RedCursorCmd *red_cursor;
> -} CursorItem;
> +} RedCursorPipeItem;
>  
>  struct CursorChannel
>  {
>      CommonGraphicsChannel parent;
>  
> -    CursorItem *item;
> +    RedCursorPipeItem *item;
>      bool cursor_visible;
>      SpicePoint16 cursor_position;
>      uint16_t cursor_trail_length;
> @@ -51,83 +51,52 @@ struct CursorChannelClass
>      CommonGraphicsChannelClass parent_class;
>  };
>  
> -typedef struct RedCursorPipeItem {
> -    RedPipeItem base;
> -    CursorItem *cursor_item;
> -} RedCursorPipeItem;
> -
>  G_DEFINE_TYPE(CursorChannel, cursor_channel, TYPE_COMMON_GRAPHICS_CHANNEL)
>  
>  static void cursor_pipe_item_free(RedPipeItem *pipe_item);
>  
> -static CursorItem *cursor_item_new(QXLInstance *qxl, RedCursorCmd *cmd)
> +static RedCursorPipeItem *cursor_pipe_item_new(QXLInstance *qxl, RedCursorCmd *cmd)
>  {
> -    CursorItem *cursor_item;
> +    RedCursorPipeItem *item = spice_malloc0(sizeof(RedCursorPipeItem));
>  
>      spice_return_val_if_fail(cmd != NULL, NULL);
>  
> -    cursor_item = g_new0(CursorItem, 1);
> -    cursor_item->qxl = qxl;
> -    cursor_item->refs = 1;
> -    cursor_item->red_cursor = cmd;
> +    red_pipe_item_init_full(&item->base, RED_PIPE_ITEM_TYPE_CURSOR,
> +                            cursor_pipe_item_free);
> +    item->qxl = qxl;
> +    item->red_cursor = cmd;
>  
> -    return cursor_item;
> +    return item;
>  }
>  
> -static CursorItem *cursor_item_ref(CursorItem *item)
> +static RedCursorPipeItem *cursor_pipe_item_ref(RedCursorPipeItem *item)
>  {
> -    spice_return_val_if_fail(item != NULL, NULL);
> -    spice_return_val_if_fail(item->refs > 0, NULL);
> -
> -    item->refs++;
> -
> +    red_pipe_item_ref(&item->base);
>      return item;
>  }

I would not keep this cursor_pipe_item_ref() wrapper

Christophe


More information about the Spice-devel mailing list