diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2015-10-23 10:28:34 +0100 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2015-10-26 08:47:02 +0000 |
commit | 579d65454c1e8fac872460b897d8ac3a66259c00 (patch) | |
tree | 68b5999606148be143edda73205e1f852a49cf85 /server/red_dispatcher.c | |
parent | e87b09a5102ca95a7be00b1317ada332c5c6cdd3 (diff) | |
download | spice-579d65454c1e8fac872460b897d8ac3a66259c00.tar.gz spice-579d65454c1e8fac872460b897d8ac3a66259c00.tar.xz spice-579d65454c1e8fac872460b897d8ac3a66259c00.zip |
worker: access dispatcher pending field using helper functions
Signed-off-by: Marc-André Lureau <marcandre.lureau@gmail.com>
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Diffstat (limited to 'server/red_dispatcher.c')
-rw-r--r-- | server/red_dispatcher.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c index 83aace46..1ad13b85 100644 --- a/server/red_dispatcher.c +++ b/server/red_dispatcher.c @@ -624,14 +624,24 @@ static void qxl_worker_reset_memslots(QXLWorker *qxl_worker) red_dispatcher_reset_memslots((RedDispatcher*)qxl_worker); } +static bool red_dispatcher_set_pending(RedDispatcher *dispatcher, int pending) +{ + // this is not atomic but is not an issue + if (test_bit(pending, dispatcher->pending)) { + return TRUE; + } + + set_bit(pending, &dispatcher->pending); + return FALSE; +} + static void red_dispatcher_wakeup(RedDispatcher *dispatcher) { RedWorkerMessageWakeup payload; - if (test_bit(RED_WORKER_PENDING_WAKEUP, dispatcher->pending)) { + if (red_dispatcher_set_pending(dispatcher, RED_DISPATCHER_PENDING_WAKEUP)) return; - } - set_bit(RED_WORKER_PENDING_WAKEUP, &dispatcher->pending); + dispatcher_send_message(&dispatcher->dispatcher, RED_WORKER_MESSAGE_WAKEUP, &payload); @@ -646,10 +656,9 @@ static void red_dispatcher_oom(RedDispatcher *dispatcher) { RedWorkerMessageOom payload; - if (test_bit(RED_WORKER_PENDING_OOM, dispatcher->pending)) { + if (red_dispatcher_set_pending(dispatcher, RED_DISPATCHER_PENDING_OOM)) return; - } - set_bit(RED_WORKER_PENDING_OOM, &dispatcher->pending); + dispatcher_send_message(&dispatcher->dispatcher, RED_WORKER_MESSAGE_OOM, &payload); @@ -1177,3 +1186,10 @@ void red_dispatcher_set_dispatcher_opaque(RedDispatcher *red_dispatcher, { dispatcher_set_opaque(&red_dispatcher->dispatcher, opaque); } + +void red_dispatcher_clear_pending(RedDispatcher *red_dispatcher, int pending) +{ + spice_return_if_fail(red_dispatcher != NULL); + + clear_bit(pending, &red_dispatcher->pending); +} |