summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2015-10-23 10:28:34 +0100
committerFrediano Ziglio <fziglio@redhat.com>2015-10-26 08:47:02 +0000
commit579d65454c1e8fac872460b897d8ac3a66259c00 (patch)
tree68b5999606148be143edda73205e1f852a49cf85
parente87b09a5102ca95a7be00b1317ada332c5c6cdd3 (diff)
downloadspice-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>
-rw-r--r--server/red_dispatcher.c28
-rw-r--r--server/red_dispatcher.h7
-rw-r--r--server/red_worker.c6
-rw-r--r--server/red_worker.h5
4 files changed, 31 insertions, 15 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);
+}
diff --git a/server/red_dispatcher.h b/server/red_dispatcher.h
index 9ee36d7d..671c013d 100644
--- a/server/red_dispatcher.h
+++ b/server/red_dispatcher.h
@@ -294,4 +294,11 @@ typedef struct RedWorkerMessageMonitorsConfigAsync {
typedef struct RedWorkerMessageDriverUnload {
} RedWorkerMessageDriverUnload;
+enum {
+ RED_DISPATCHER_PENDING_WAKEUP,
+ RED_DISPATCHER_PENDING_OOM,
+};
+
+void red_dispatcher_clear_pending(RedDispatcher *red_dispatcher, int pending);
+
#endif
diff --git a/server/red_worker.c b/server/red_worker.c
index 3d326d1e..719ffd15 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -610,7 +610,6 @@ typedef struct RedWorker {
int channel;
int running;
- uint32_t *pending;
struct pollfd poll_fds[MAX_EVENT_SOURCES];
struct SpiceWatch watches[MAX_EVENT_SOURCES];
unsigned int event_timeout;
@@ -11007,8 +11006,8 @@ void handle_dev_wakeup(void *opaque, void *payload)
{
RedWorker *worker = opaque;
- clear_bit(RED_WORKER_PENDING_WAKEUP, worker->pending);
stat_inc_counter(worker->wakeup_counter, 1);
+ red_dispatcher_clear_pending(worker->red_dispatcher, RED_DISPATCHER_PENDING_WAKEUP);
}
void handle_dev_oom(void *opaque, void *payload)
@@ -11041,7 +11040,7 @@ void handle_dev_oom(void *opaque, void *payload)
worker->current_size,
worker->display_channel ?
red_channel_sum_pipes_size(display_red_channel) : 0);
- clear_bit(RED_WORKER_PENDING_OOM, worker->pending);
+ red_dispatcher_clear_pending(worker->red_dispatcher, RED_DISPATCHER_PENDING_OOM);
}
void handle_dev_reset_cursor(void *opaque, void *payload)
@@ -11616,7 +11615,6 @@ RedWorker* red_worker_new(WorkerInitData *init_data)
if (worker->record_fd) {
dispatcher_register_universal_handler(dispatcher, worker_dispatcher_record);
}
- worker->pending = init_data->pending;
worker->cursor_visible = TRUE;
spice_assert(init_data->num_renderers > 0);
worker->num_renderers = init_data->num_renderers;
diff --git a/server/red_worker.h b/server/red_worker.h
index 7732e390..e2443c4b 100644
--- a/server/red_worker.h
+++ b/server/red_worker.h
@@ -24,11 +24,6 @@
#include "red_dispatcher.h"
enum {
- RED_WORKER_PENDING_WAKEUP,
- RED_WORKER_PENDING_OOM,
-};
-
-enum {
RED_RENDERER_INVALID,
RED_RENDERER_SW,
RED_RENDERER_OGL_PBUF,