diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2015-12-09 12:17:43 +0000 |
---|---|---|
committer | Jonathon Jongsma <jjongsma@redhat.com> | 2015-12-18 16:24:31 -0600 |
commit | 026510e0333ccaacee07d7f8bbd332d8df8db07c (patch) | |
tree | c8d00c0653bf45e222d3399e293b46f49ac757af | |
parent | 06b8ea8a268f715abca986b0d1213cd9702a96c4 (diff) |
worker: make sure we dispatch after releasing itemsglib-release
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
-rw-r--r-- | server/display-channel.c | 2 | ||||
-rw-r--r-- | server/red-worker.c | 8 | ||||
-rw-r--r-- | server/red-worker.h | 1 |
3 files changed, 11 insertions, 0 deletions
diff --git a/server/display-channel.c b/server/display-channel.c index ec4ca10f..ae2aacfb 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -1977,9 +1977,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 9cb6232b..f05e5392 100644 --- a/server/red-worker.c +++ b/server/red-worker.c @@ -113,6 +113,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 3d7da212..951f356a 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); |