Re: [PATCH 8/9] worker: make sure we dispatch after releasing items

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Same comment as 
http://lists.freedesktop.org/archives/spice-devel/2015-December/024682.html

"I don't really understand the reason for this patch. Why do we need to wakeup
the worker immediately after a display pipe item has been released, but not a
cursor item? Why can't we wait for the next worker poll timeout to expire?
Updating the worker timeout seems like an implementation detail, so adding an
API for other classes to call seems a little weird to me."

Reviewed-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx>


On Wed, 2015-12-09 at 12:17 +0000, Frediano Ziglio wrote:
> From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx>
> 
> ---
>  server/display-channel.c | 2 ++
>  server/red-worker.c      | 8 ++++++++
>  server/red-worker.h      | 1 +
>  3 files changed, 11 insertions(+)
> 
> diff --git a/server/display-channel.c b/server/display-channel.c
> index 32d87af..60170cb 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -1987,9 +1987,11 @@ static void hold_item(RedChannelClient *rcc, PipeItem
> *item)
>  static void release_item(RedChannelClient *rcc, PipeItem *item, int
> item_pushed)
>  {
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
> +    RedWorker *worker = DCC_TO_WORKER(dcc);
>  
>      spice_return_if_fail(item != NULL);
>      dcc_release_item(dcc, item, item_pushed);
> +    red_worker_update_timeout(worker, 0);
>  }
>  
>  static int handle_migrate_flush_mark(RedChannelClient *rcc)
> diff --git a/server/red-worker.c b/server/red-worker.c
> index b59a5a1..ae4ac27 100644
> --- a/server/red-worker.c
> +++ b/server/red-worker.c
> @@ -112,6 +112,14 @@ RedMemSlotInfo* red_worker_get_memslot(RedWorker *worker)
>      return &worker->mem_slots;
>  }
>  
> +void red_worker_update_timeout(RedWorker *worker, gint timeout)
> +{
> +    spice_return_if_fail(worker != NULL);
> +    spice_return_if_fail(timeout >= 0);
> +
> +    worker->event_timeout = MIN(worker->event_timeout, timeout);
> +}
> +
>  static int display_is_connected(RedWorker *worker)
>  {
>      return (worker->display_channel && red_channel_is_connected(
> diff --git a/server/red-worker.h b/server/red-worker.h
> index b55a45c..3a9dc19 100644
> --- a/server/red-worker.h
> +++ b/server/red-worker.h
> @@ -94,6 +94,7 @@ static inline void red_pipes_add_verb(RedChannel *channel,
> uint16_t verb)
>  
>  RedWorker* red_worker_new(QXLInstance *qxl, RedDispatcher *red_dispatcher);
>  bool       red_worker_run(RedWorker *worker);
> +void       red_worker_update_timeout(RedWorker *worker, gint timeout);
>  QXLInstance* red_worker_get_qxl(RedWorker *worker);
>  RedChannel* red_worker_get_cursor_channel(RedWorker *worker);
>  RedChannel* red_worker_get_display_channel(RedWorker *worker);
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]