[Spice-devel] [PATCH spice-server 07/10] Propagate running property from RedWorker to DisplayChannel

Jonathon Jongsma jjongsma at redhat.com
Wed Mar 20 21:17:19 UTC 2019


Somehow this information doesn't really seem to belong to
DisplayChannel, but I can't put my finger on exactly why it feels out
of place...



On Wed, 2019-03-20 at 09:59 +0000, Frediano Ziglio wrote:
> This is a preparatory patch to allows DisplayChannel to check
> if device is running.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/display-channel-private.h | 1 +
>  server/display-channel.c         | 8 ++++++++
>  server/display-channel.h         | 2 ++
>  server/red-worker.c              | 2 ++
>  4 files changed, 13 insertions(+)
> 
> diff --git a/server/display-channel-private.h b/server/display-
> channel-private.h
> index 58179531..067c6418 100644
> --- a/server/display-channel-private.h
> +++ b/server/display-channel-private.h
> @@ -89,6 +89,7 @@ struct DisplayChannelPrivate
>      uint32_t renderer;
>      int enable_jpeg;
>      int enable_zlib_glz_wrap;
> +    bool running;

At minimum, this seems like way too generic of a name. I will probably
look at this later and wonder what it means for a DisplayChannel to be
'running'. But in reality this variable indicates that the QXL device
is started? Actually, after looking briefly at this handle_dev_start()
function, I can't even figure out what causes this function to be
called...

>  
>      /* A ring of pending drawables for this DisplayChannel,
> regardless of which
>       * surface they're associated with. This list is mainly used to
> flush older
> diff --git a/server/display-channel.c b/server/display-channel.c
> index cb052bfc..49a2bd48 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -2540,3 +2540,11 @@ void display_channel_debug_oom(DisplayChannel
> *display, const char *msg)
>                  ring_get_length(&display->priv->current_list),
>                  red_channel_sum_pipes_size(channel));
>  }
> +
> +void display_channel_set_running(DisplayChannel *display, bool
> running)
> +{
> +    if (running == display->priv->running) {
> +        return;
> +    }
> +    display->priv->running = running;
> +}
> diff --git a/server/display-channel.h b/server/display-channel.h
> index f64da0bd..bdf2f059 100644
> --- a/server/display-channel.h
> +++ b/server/display-channel.h
> @@ -158,6 +158,8 @@ void
> display_channel_reset_image_cache(DisplayChannel *self);
>  
>  void display_channel_debug_oom(DisplayChannel *display, const char
> *msg);
>  
> +void display_channel_set_running(DisplayChannel *display, bool
> running);
> +
>  G_END_DECLS
>  
>  #endif /* DISPLAY_CHANNEL_H_ */
> diff --git a/server/red-worker.c b/server/red-worker.c
> index 07329b17..c9c47133 100644
> --- a/server/red-worker.c
> +++ b/server/red-worker.c
> @@ -588,6 +588,7 @@ static void handle_dev_stop(void *opaque, void
> *payload)
>      spice_assert(worker->running);
>  
>      worker->running = FALSE;
> +    display_channel_set_running(worker->display_channel, false);
>  
>      display_channel_free_glz_drawables(worker->display_channel);
>      display_channel_flush_all_surfaces(worker->display_channel);
> @@ -616,6 +617,7 @@ static void handle_dev_start(void *opaque, void
> *payload)
>          display_channel_wait_for_migrate_data(worker-
> >display_channel);
>      }
>      worker->running = TRUE;
> +    display_channel_set_running(worker->display_channel, true);
>      worker->event_timeout = 0;
>      guest_set_client_capabilities(worker);
>  }



More information about the Spice-devel mailing list