[Spice-devel] [PATCH 01/15] Palette cache: Use correct marshal function

Frediano Ziglio fziglio at redhat.com
Tue Nov 3 09:16:31 PST 2015


> 
> From: Jonathon Jongsma <jjongsma at redhat.com>
> 
> In order to invalidate a single palette cache item, we were using
> spice_marshall_msg_cursor_inval_one(), which is the marshal function
> used to send an invalidation message for the Cursor channel's cache.
> This didn't cause any problems because SPICE_MSG_CURSOR_INVAL_ONE and
> SPICE_MSG_DISPLAY_INVAL_PALETTE have the same message ID and parameters,
> but it's better to use the correct marshalling function.
> ---
>  server/red_worker.c | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/server/red_worker.c b/server/red_worker.c
> index a15d5b6..9702652 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -7625,15 +7625,17 @@ static inline void
> marshall_qxl_drawable(RedChannelClient *rcc,
>          red_lossy_marshall_qxl_drawable(display_channel->common.worker, rcc,
>          m, dpi);
>  }
>  
> -static inline void red_marshall_inval(RedChannelClient *rcc,
> -                                      SpiceMarshaller *base_marshaller,
> CacheItem *cach_item)
> +static inline void red_marshall_inval_palette(RedChannelClient *rcc,
> +                                              SpiceMarshaller
> *base_marshaller,
> +                                              CacheItem *cache_item)
>  {
>      SpiceMsgDisplayInvalOne inval_one;
>  
> -    red_channel_client_init_send_data(rcc, cach_item->inval_type, NULL);
> -    inval_one.id = *(uint64_t *)&cach_item->id;
> +    red_channel_client_init_send_data(rcc, cache_item->inval_type, NULL);
> +    inval_one.id = *(uint64_t *)&cache_item->id;
> +
> +    spice_marshall_msg_display_inval_palette(base_marshaller, &inval_one);
>  
> -    spice_marshall_msg_cursor_inval_one(base_marshaller, &inval_one);
>  }
>  
>  static void
>  display_channel_marshall_migrate_data_surfaces(DisplayChannelClient *dcc,
> @@ -8092,7 +8094,7 @@ static void display_channel_send_item(RedChannelClient
> *rcc, PipeItem *pipe_item
>          break;
>      }
>      case PIPE_ITEM_TYPE_INVAL_ONE:
> -        red_marshall_inval(rcc, m, (CacheItem *)pipe_item);
> +        red_marshall_inval_palette(rcc, m, (CacheItem *)pipe_item);
>          break;
>      case PIPE_ITEM_TYPE_STREAM_CREATE: {
>          StreamAgent *agent = SPICE_CONTAINEROF(pipe_item, StreamAgent,
>          create_item);
> @@ -9348,7 +9350,6 @@ static void
> display_channel_client_release_item_before_push(DisplayChannelClient
>          free(item);
>          break;
>      }
> -    case PIPE_ITEM_TYPE_INVAL_ONE:
>      case PIPE_ITEM_TYPE_VERB:
>      case PIPE_ITEM_TYPE_MIGRATE_DATA:
>      case PIPE_ITEM_TYPE_PIXMAP_SYNC:

Jonathon, did you test this issue?
How?

It works correctly at least normal usage but I think this involve some migration.

I'll add a TODO to my list. All this confusions came from bad marshalling
names (spice-protocols I think). However is not a regression.

Frediano


More information about the Spice-devel mailing list