[Spice-devel] [PATCH spice-server 2/3] spicevmc: Do not use RedCharDevice pipe items handling

Uri Lublin uril at redhat.com
Sun Jun 2 14:37:15 UTC 2019


On 6/1/19 3:14 PM, Frediano Ziglio wrote:
> As we don't use any token there's no reason to not queue
> directly instead of passing through RedCharDevice.
> This will make easier to limit the queue which currently is
> unlimited.

Hi,

If we need flow control, how difficult would it be to add support
for tokens ?
( there is a "todo: add flow control" comment in spicevmc ).

Uri.

> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>   server/spicevmc.c | 15 +++++----------
>   1 file changed, 5 insertions(+), 10 deletions(-)
> 
> diff --git a/server/spicevmc.c b/server/spicevmc.c
> index 84bbb73c2..8c41573ae 100644
> --- a/server/spicevmc.c
> +++ b/server/spicevmc.c
> @@ -360,29 +360,24 @@ static RedPipeItem *spicevmc_chardev_read_msg_from_dev(RedCharDevice *self,
>   
>           msg_item_compressed = try_compress_lz4(channel, n, msg_item);
>           if (msg_item_compressed != NULL) {
> -            return &msg_item_compressed->base;
> +            red_channel_client_pipe_add_push(channel->rcc, &msg_item_compressed->base);
> +            return NULL;
>           }
>   #endif
>           stat_inc_counter(channel->out_data, n);
>           msg_item->uncompressed_data_size = n;
>           msg_item->buf_used = n;
> -        return &msg_item->base;
> -    } else {
> -        channel->pipe_item = msg_item;
> +        red_channel_client_pipe_add_push(channel->rcc, &msg_item->base);
>           return NULL;
>       }
> +    channel->pipe_item = msg_item;
> +    return NULL;
>   }
>   
>   static void spicevmc_chardev_send_msg_to_client(RedCharDevice *self,
>                                                   RedPipeItem *msg,
>                                                   RedClient *client)
>   {
> -    RedCharDeviceSpiceVmc *vmc = RED_CHAR_DEVICE_SPICEVMC(self);
> -    RedVmcChannel *channel = RED_VMC_CHANNEL(vmc->channel);
> -
> -    spice_assert(red_channel_client_get_client(channel->rcc) == client);
> -    red_pipe_item_ref(msg);
> -    red_channel_client_pipe_add_push(channel->rcc, msg);
>   }
>   
>   static void red_port_init_item_free(struct RedPipeItem *base)
> 



More information about the Spice-devel mailing list