From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=42959 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PhTXH-0003r3-Pp for qemu-devel@nongnu.org; Mon, 24 Jan 2011 16:01:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PhTXB-0005ak-DH for qemu-devel@nongnu.org; Mon, 24 Jan 2011 16:01:15 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:51286) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PhTXB-0005aX-Ak for qemu-devel@nongnu.org; Mon, 24 Jan 2011 16:01:09 -0500 Received: from d01dlp01.pok.ibm.com (d01dlp01.pok.ibm.com [9.56.224.56]) by e9.ny.us.ibm.com (8.14.4/8.13.1) with ESMTP id p0OKZqbM000712 for ; Mon, 24 Jan 2011 15:36:36 -0500 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id C7530728069 for ; Mon, 24 Jan 2011 16:01:07 -0500 (EST) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p0OL17YH150430 for ; Mon, 24 Jan 2011 16:01:07 -0500 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p0OL17h9024046 for ; Mon, 24 Jan 2011 19:01:07 -0200 From: Anthony Liguori Date: Mon, 24 Jan 2011 15:00:44 -0600 Message-Id: <1295902845-29807-7-git-send-email-aliguori@us.ibm.com> In-Reply-To: <1295902845-29807-1-git-send-email-aliguori@us.ibm.com> References: <1295902845-29807-1-git-send-email-aliguori@us.ibm.com> Subject: [Qemu-devel] [PATCH 6/7] Teach vnc server to use GThread directly List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Anthony Liguori , Stefan Hajnoczi , Marcelo Tosatti , Paul Brook , Paulo Bonzini , Arun Bharadwaj Signed-off-by: Anthony Liguori diff --git a/qemu-thread.c b/qemu-thread.c index 748da5e..6d0c51e 100644 --- a/qemu-thread.c +++ b/qemu-thread.c @@ -14,6 +14,31 @@ #include "qemu-common.h" #include "qemu-thread.h" +#ifdef _WIN32 +GThread *q_thread_create_nosignal(GThreadFunc func, + gpointer data, + gboolean joinable, + GError **error) +{ + return g_thread_create(func, data, joinable, NULL); +} +#else +GThread *q_thread_create_nosignal(GThreadFunc func, + gpointer data, + gboolean joinable, + GError **error) +{ + GThread *tid; + sigset_t set, old; + + sigfillset(&set); + pthread_sigmask(SIG_SETMASK, &set, &old); + tid = g_thread_create(func, data, joinable, error); + pthread_sigmask(SIG_SETMASK, &old, NULL); + return tid; +} +#endif + struct trampoline_data { QemuThread *thread; diff --git a/qemu-thread.h b/qemu-thread.h index 2c99c94..ec7fabd 100644 --- a/qemu-thread.h +++ b/qemu-thread.h @@ -10,6 +10,11 @@ struct QemuThread { typedef struct QemuThread QemuThread; +GThread *q_thread_create_nosignal(GThreadFunc func, + gpointer data, + gboolean joinable, + GError **error); + void qemu_thread_create(QemuThread *thread, void *(*start_routine)(void*), void *arg); diff --git a/ui/vnc-jobs-async.c b/ui/vnc-jobs-async.c index 0c2b1a0..2df245d 100644 --- a/ui/vnc-jobs-async.c +++ b/ui/vnc-jobs-async.c @@ -51,7 +51,7 @@ struct VncJobQueue { GCond *cond; GStaticMutex mutex; - QemuThread thread; + GThread *thread; Buffer buffer; bool exit; QTAILQ_HEAD(, VncJob) jobs; @@ -289,11 +289,11 @@ static void vnc_queue_clear(VncJobQueue *q) queue = NULL; /* Unset global queue */ } -static void *vnc_worker_thread(void *arg) +static gpointer vnc_worker_thread(gpointer arg) { VncJobQueue *queue = arg; - qemu_thread_self(&queue->thread); + queue->thread = g_thread_self(); while (!vnc_worker_thread_loop(queue)) ; vnc_queue_clear(queue); @@ -308,7 +308,7 @@ void vnc_start_worker_thread(void) return ; q = vnc_queue_init(); - qemu_thread_create(&q->thread, vnc_worker_thread, q); + q->thread = q_thread_create_nosignal(vnc_worker_thread, q, FALSE, NULL); queue = q; /* Set global queue */ } -- 1.7.0.4