win32: Switch thread abstraction to us TLS variable internally
PATCH 1/1 win32: Switch thread abstraction to us TLS variable internally
We already depend on working __thread support for coroutines, so this complication here is no longer needed.
Signed-off-by Jan Kiszka <[email protected]>
---
Post-1.3 material.
qemu-thread-win32.c | 24 ++++++------------------ 1 files changed, 6 insertions(+), 18 deletions(-)
qemu-thread-win32.c +6 -18
@@ -239,7 +239,7 @@ struct QemuThreadData {CRITICAL_SECTION cs; }; -static int qemu_thread_tls_index =TLS_OUT_OF_INDEXES ; +static __threadQemuThreadData *qemu_thread_data;static unsigned __stdcallwin32_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 (); }
Signature · 1 line
1.7.3.4
Quoted 5 lines
We already depend on working
__threadsupport for coroutines, so this complication here is no longer needed.Signed-off-by Jan Kiszka <[email protected]>
Reviewed-by Paolo Bonzini <[email protected]>
Quoted 79 lines
---
Post-1.3 material.
qemu-thread-win32.c | 24 ++++++------------------ 1 files changed, 6 insertions(+), 18 deletions(-)qemu-thread-win32.c +4
-3@@ -239,7 +239,7 @@ struct QemuThreadData {CRITICAL_SECTION cs; }; -static int qemu_thread_tls_index =TLS_OUT_OF_INDEXES ; +static __threadQemuThreadData *qemu_thread_data;static unsigned __stdcallwin32_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;qemu-thread-win32.c +2
-16@@ -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