> > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> > > --- > server/display-channel.c | 2 ++ > server/red_worker.c | 10 ++++++++++ > server/red_worker.h | 1 + > 3 files changed, 13 insertions(+) > > diff --git a/server/display-channel.c b/server/display-channel.c > index d168190..6b9affc 100644 > --- a/server/display-channel.c > +++ b/server/display-channel.c > @@ -1968,9 +1968,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 93ed8d0..8d1802e 100644 > --- a/server/red_worker.c > +++ b/server/red_worker.c > @@ -110,6 +110,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->timeout = MIN(worker->timeout, timeout); > +} > + > static int display_is_connected(RedWorker *worker) > { > return (worker->display_channel && red_channel_is_connected( > @@ -1641,6 +1649,8 @@ static gboolean worker_source_prepare(GSource *source, > gint *timeout) > *timeout = worker->timeout; > *timeout = MIN(worker->timeout, > display_channel_get_streams_timeout(worker->display_channel)); > + if (*timeout == 0) > + return TRUE; > > return FALSE; /* do no timeout poll */ > } > diff --git a/server/red_worker.h b/server/red_worker.h > index bfbc616..236c2f8 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); > -- > 2.4.3 This basically add an iteration after current one of every bunch of PipeItems handled. Is not clear why now this code is required. Is it require after Glib loop code? Why? Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel