summaryrefslogtreecommitdiffstats
path: root/server/red_dispatcher.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2015-10-23 10:34:24 +0100
committerFrediano Ziglio <fziglio@redhat.com>2015-10-26 09:12:55 +0000
commitf7b48981e37eec27327a010296008ffa6c727d68 (patch)
tree241abc7b1adcac812bf7c6ae27454a6705808eda /server/red_dispatcher.c
parent579d65454c1e8fac872460b897d8ac3a66259c00 (diff)
downloadspice-f7b48981e37eec27327a010296008ffa6c727d68.tar.gz
spice-f7b48981e37eec27327a010296008ffa6c727d68.tar.xz
spice-f7b48981e37eec27327a010296008ffa6c727d68.zip
worker: remove need for WorkerInitData
Move code around to declare and place it where it fits better. Acked-by: Frediano Ziglio <fziglio@redhat.com>
Diffstat (limited to 'server/red_dispatcher.c')
-rw-r--r--server/red_dispatcher.c75
1 files changed, 5 insertions, 70 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c
index 1ad13b85..43f061d9 100644
--- a/server/red_dispatcher.c
+++ b/server/red_dispatcher.c
@@ -68,11 +68,6 @@ struct RedDispatcher {
unsigned int max_monitors;
};
-extern uint32_t streaming_video;
-extern SpiceImageCompression image_compression;
-extern spice_wan_compression_t jpeg_state;
-extern spice_wan_compression_t zlib_glz_state;
-
static RedDispatcher *dispatchers = NULL;
static int red_dispatcher_check_qxl_version(RedDispatcher *rd, int major, int minor)
@@ -204,46 +199,6 @@ static void red_dispatcher_cursor_migrate(RedChannelClient *rcc)
&payload);
}
-typedef struct RendererInfo {
- int id;
- const char *name;
-} RendererInfo;
-
-static RendererInfo renderers_info[] = {
- {RED_RENDERER_SW, "sw"},
-#ifdef USE_OPENGL
- {RED_RENDERER_OGL_PBUF, "oglpbuf"},
- {RED_RENDERER_OGL_PIXMAP, "oglpixmap"},
-#endif
- {RED_RENDERER_INVALID, NULL},
-};
-
-static uint32_t renderers[RED_RENDERER_LAST];
-static uint32_t num_renderers = 0;
-
-static RendererInfo *find_renderer(const char *name)
-{
- RendererInfo *inf = renderers_info;
- while (inf->name) {
- if (strcmp(name, inf->name) == 0) {
- return inf;
- }
- inf++;
- }
- return NULL;
-}
-
-int red_dispatcher_add_renderer(const char *name)
-{
- RendererInfo *inf;
-
- if (num_renderers == RED_RENDERER_LAST || !(inf = find_renderer(name))) {
- return FALSE;
- }
- renderers[num_renderers++] = inf->id;
- return TRUE;
-}
-
int red_dispatcher_qxl_count(void)
{
return num_active_workers;
@@ -1073,12 +1028,11 @@ static RedChannel *red_dispatcher_cursor_channel_create(RedDispatcher *dispatche
void red_dispatcher_init(QXLInstance *qxl)
{
RedDispatcher *red_dispatcher;
- WorkerInitData init_data;
- QXLDevInitInfo init_info;
RedChannel *display_channel;
RedChannel *cursor_channel;
ClientCbs client_cbs = { NULL, };
+ spice_return_if_fail(qxl != NULL);
spice_return_if_fail(qxl->st->dispatcher == NULL);
static gsize initialized = FALSE;
@@ -1092,22 +1046,11 @@ void red_dispatcher_init(QXLInstance *qxl)
}
red_dispatcher = spice_new0(RedDispatcher, 1);
+ red_dispatcher->qxl = qxl;
ring_init(&red_dispatcher->async_commands);
spice_debug("red_dispatcher->async_commands.next %p", red_dispatcher->async_commands.next);
dispatcher_init(&red_dispatcher->dispatcher, RED_WORKER_MESSAGE_COUNT, NULL);
- init_data.qxl = red_dispatcher->qxl = qxl;
- init_data.id = qxl->id;
- init_data.red_dispatcher = red_dispatcher;
- init_data.pending = &red_dispatcher->pending;
- init_data.num_renderers = num_renderers;
- memcpy(init_data.renderers, renderers, sizeof(init_data.renderers));
-
pthread_mutex_init(&red_dispatcher->async_lock, NULL);
- init_data.image_compression = image_compression;
- init_data.jpeg_state = jpeg_state;
- init_data.zlib_glz_state = zlib_glz_state;
- init_data.streaming_video = streaming_video;
-
red_dispatcher->base.major_version = SPICE_INTERFACE_QXL_MAJOR;
red_dispatcher->base.minor_version = SPICE_INTERFACE_QXL_MINOR;
red_dispatcher->base.wakeup = qxl_worker_wakeup;
@@ -1129,20 +1072,12 @@ void red_dispatcher_init(QXLInstance *qxl)
red_dispatcher->max_monitors = UINT_MAX;
- qxl->st->qif->get_init_info(qxl, &init_info);
-
- init_data.memslot_id_bits = init_info.memslot_id_bits;
- init_data.memslot_gen_bits = init_info.memslot_gen_bits;
- init_data.num_memslots = init_info.num_memslots;
- init_data.num_memslots_groups = init_info.num_memslots_groups;
- init_data.internal_groupslot_id = init_info.internal_groupslot_id;
- init_data.n_surfaces = init_info.n_surfaces;
+ // TODO: reference and free
+ RedWorker *worker = red_worker_new(qxl, red_dispatcher);
+ red_worker_run(worker);
num_active_workers = 1;
- // TODO: reference and free
- RedWorker *worker = red_worker_new(&init_data);
- red_worker_run(worker);
display_channel = red_dispatcher_display_channel_create(red_dispatcher);
if (display_channel) {