From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43350) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TbrGD-0001Yn-QM for qemu-devel@nongnu.org; Fri, 23 Nov 2012 06:17:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TbrG9-0001z5-NS for qemu-devel@nongnu.org; Fri, 23 Nov 2012 06:17:29 -0500 Received: from mx4-phx2.redhat.com ([209.132.183.25]:58028) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TbrG9-0001yq-GD for qemu-devel@nongnu.org; Fri, 23 Nov 2012 06:17:25 -0500 Date: Fri, 23 Nov 2012 06:17:21 -0500 (EST) From: Paolo Bonzini Message-ID: <1778849658.13888922.1353669441602.JavaMail.root@redhat.com> In-Reply-To: <50AF5A01.9010601@siemens.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] win32: Switch thread abstraction to us TLS variable internally List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Stefan Weil , Anthony Liguori , qemu-devel > We already depend on working __thread support for coroutines, so this > complication here is no longer needed. > > Signed-off-by: Jan Kiszka Reviewed-by: Paolo Bonzini > --- > > Post-1.3 material. > > qemu-thread-win32.c | 24 ++++++------------------ > 1 files changed, 6 insertions(+), 18 deletions(-) > > diff --git a/qemu-thread-win32.c b/qemu-thread-win32.c > index 4b3db60..6499ce9 100644 > --- a/qemu-thread-win32.c > +++ b/qemu-thread-win32.c > @@ -239,7 +239,7 @@ struct QemuThreadData { > CRITICAL_SECTION cs; > }; > > -static int qemu_thread_tls_index = TLS_OUT_OF_INDEXES; > +static __thread QemuThreadData *qemu_thread_data; > > static unsigned __stdcall win32_start_routine(void *arg) > { > @@ -251,14 +251,15 @@ static unsigned __stdcall > win32_start_routine(void *arg) > g_free(data); > data = NULL; > } > - TlsSetValue(qemu_thread_tls_index, data); > + qemu_thread_data = data; > qemu_thread_exit(start_routine(thread_arg)); > abort(); > } > > void qemu_thread_exit(void *arg) > { > - QemuThreadData *data = TlsGetValue(qemu_thread_tls_index); > + QemuThreadData *data = qemu_thread_data; > + > if (data) { > assert(data->mode != QEMU_THREAD_DETACHED); > data->ret = arg; > @@ -298,25 +299,13 @@ void *qemu_thread_join(QemuThread *thread) > return ret; > } > > -static inline void qemu_thread_init(void) > -{ > - if (qemu_thread_tls_index == TLS_OUT_OF_INDEXES) { > - qemu_thread_tls_index = TlsAlloc(); > - if (qemu_thread_tls_index == TLS_OUT_OF_INDEXES) { > - error_exit(ERROR_NO_SYSTEM_RESOURCES, __func__); > - } > - } > -} > - > - > void qemu_thread_create(QemuThread *thread, > void *(*start_routine)(void *), > void *arg, int mode) > { > HANDLE hThread; > - > struct QemuThreadData *data; > - qemu_thread_init(); > + > data = g_malloc(sizeof *data); > data->start_routine = start_routine; > data->arg = arg; > @@ -338,8 +327,7 @@ void qemu_thread_create(QemuThread *thread, > > void qemu_thread_get_self(QemuThread *thread) > { > - qemu_thread_init(); > - thread->data = TlsGetValue(qemu_thread_tls_index); > + thread->data = qemu_thread_data; > thread->tid = GetCurrentThreadId(); > } > > -- > 1.7.3.4 >