summaryrefslogtreecommitdiffstats
path: root/server/red_dispatcher.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2013-09-02 18:56:41 +0200
committerFrediano Ziglio <fziglio@redhat.com>2015-10-22 17:06:44 +0100
commitbba1bf180afee1e8c1e3b5b3c64a5df1861743ec (patch)
tree20c24d443f7a5e3f187701a383a354e8d539936b /server/red_dispatcher.c
parent15da68dbded450a4d31692aaa78d5fa3b5d0c6c8 (diff)
downloadspice-bba1bf180afee1e8c1e3b5b3c64a5df1861743ec.tar.gz
spice-bba1bf180afee1e8c1e3b5b3c64a5df1861743ec.tar.xz
spice-bba1bf180afee1e8c1e3b5b3c64a5df1861743ec.zip
server: remove worker thread creation from dispatcher
Acked-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
Diffstat (limited to 'server/red_dispatcher.c')
-rw-r--r--server/red_dispatcher.c21
1 files changed, 3 insertions, 18 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c
index 7ad860c3..0bc853d8 100644
--- a/server/red_dispatcher.c
+++ b/server/red_dispatcher.c
@@ -56,7 +56,6 @@ struct RedDispatcher {
QXLWorker base;
QXLInstance *qxl;
Dispatcher dispatcher;
- pthread_t worker_thread;
uint32_t pending;
int primary_active;
int x_res;
@@ -1064,14 +1063,10 @@ static RedChannel *red_dispatcher_cursor_channel_create(RedDispatcher *dispatche
void red_dispatcher_init(QXLInstance *qxl)
{
RedDispatcher *red_dispatcher;
- RedWorkerMessage message;
WorkerInitData init_data;
QXLDevInitInfo init_info;
- int r;
RedChannel *display_channel;
RedChannel *cursor_channel;
- sigset_t thread_sig_mask;
- sigset_t curr_sig_mask;
ClientCbs client_cbs = { NULL, };
spice_return_if_fail(qxl->st->dispatcher == NULL);
@@ -1135,19 +1130,9 @@ void red_dispatcher_init(QXLInstance *qxl)
num_active_workers = 1;
- sigfillset(&thread_sig_mask);
- sigdelset(&thread_sig_mask, SIGILL);
- sigdelset(&thread_sig_mask, SIGFPE);
- sigdelset(&thread_sig_mask, SIGSEGV);
- pthread_sigmask(SIG_SETMASK, &thread_sig_mask, &curr_sig_mask);
- if ((r = pthread_create(&red_dispatcher->worker_thread, NULL, red_worker_main, &init_data))) {
- spice_error("create thread failed %d", r);
- }
- pthread_sigmask(SIG_SETMASK, &curr_sig_mask, NULL);
-
- read_message(red_dispatcher->dispatcher.send_fd, &message);
- spice_assert(message == RED_WORKER_MESSAGE_READY);
-
+ // 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) {