[Spice-devel] [PATCH spice-server 1/2] red-channel-client: Introduce some helpers to update watch event mask

Christophe Fergeau cfergeau at redhat.com
Mon Sep 11 15:29:08 UTC 2017


Why ?

Christophe

On Mon, Sep 11, 2017 at 01:29:05PM +0100, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/red-channel-client.c | 27 ++++++++++++++++-----------
>  1 file changed, 16 insertions(+), 11 deletions(-)
> 
> diff --git a/server/red-channel-client.c b/server/red-channel-client.c
> index d9333ba6f..eab1d593d 100644
> --- a/server/red-channel-client.c
> +++ b/server/red-channel-client.c
> @@ -45,6 +45,8 @@
>  #define IOV_MAX 1024
>  #endif
>  
> +#define SPICE_WATCH_EVENTS_READ_WRITE (SPICE_WATCH_EVENT_READ|SPICE_WATCH_EVENT_WRITE)
> +
>  typedef struct SpiceDataHeaderOpaque SpiceDataHeaderOpaque;
>  
>  typedef uint16_t (*get_msg_type_proc)(SpiceDataHeaderOpaque *header);
> @@ -972,6 +974,16 @@ cleanup:
>      return local_error == NULL;
>  }
>  
> +static void
> +red_channel_client_watch_update_mask(RedChannelClient *rcc, int event_mask)
> +{
> +    if (rcc->priv->stream->watch) {
> +        SpiceCoreInterfaceInternal *core;
> +        core = red_channel_get_core_interface(rcc->priv->channel);
> +        core->watch_update_mask(core, rcc->priv->stream->watch, event_mask);
> +    }
> +}
> +
>  static void red_channel_client_seamless_migration_done(RedChannelClient *rcc)
>  {
>      rcc->priv->wait_migrate_data = FALSE;
> @@ -1315,12 +1327,8 @@ void red_channel_client_push(RedChannelClient *rcc)
>      while ((pipe_item = red_channel_client_pipe_item_get(rcc))) {
>          red_channel_client_send_item(rcc, pipe_item);
>      }
> -    if (red_channel_client_no_item_being_sent(rcc) && g_queue_is_empty(&rcc->priv->pipe)
> -        && rcc->priv->stream->watch) {
> -        SpiceCoreInterfaceInternal *core;
> -        core = red_channel_get_core_interface(rcc->priv->channel);
> -        core->watch_update_mask(core, rcc->priv->stream->watch,
> -                                SPICE_WATCH_EVENT_READ);
> +    if (red_channel_client_no_item_being_sent(rcc) && g_queue_is_empty(&rcc->priv->pipe)) {
> +        red_channel_client_watch_update_mask(rcc, SPICE_WATCH_EVENT_READ);
>      }
>      rcc->priv->during_send = FALSE;
>      g_object_unref(rcc);
> @@ -1533,11 +1541,8 @@ static inline gboolean prepare_pipe_add(RedChannelClient *rcc, RedPipeItem *item
>          red_pipe_item_unref(item);
>          return FALSE;
>      }
> -    if (g_queue_is_empty(&rcc->priv->pipe) && rcc->priv->stream->watch) {
> -        SpiceCoreInterfaceInternal *core;
> -        core = red_channel_get_core_interface(rcc->priv->channel);
> -        core->watch_update_mask(core, rcc->priv->stream->watch,
> -                                SPICE_WATCH_EVENT_READ | SPICE_WATCH_EVENT_WRITE);
> +    if (g_queue_is_empty(&rcc->priv->pipe)) {
> +        red_channel_client_watch_update_mask(rcc, SPICE_WATCH_EVENTS_READ_WRITE);
>      }
>      return TRUE;
>  }
> -- 
> 2.13.5
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list