summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2015-12-09 12:17:43 +0000
committerJonathon Jongsma <jjongsma@redhat.com>2015-12-18 16:24:31 -0600
commit026510e0333ccaacee07d7f8bbd332d8df8db07c (patch)
treec8d00c0653bf45e222d3399e293b46f49ac757af
parent06b8ea8a268f715abca986b0d1213cd9702a96c4 (diff)
worker: make sure we dispatch after releasing itemsglib-release
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
-rw-r--r--server/display-channel.c2
-rw-r--r--server/red-worker.c8
-rw-r--r--server/red-worker.h1
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);