From 6f520fb1dd6fcc2caeb2fc9fed9140f5d96f84a7 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 15 Jul 2019 02:35:58 +0200 Subject: [PATCH] windows-thread: Add support for creating a thread in detached state. * lib/windows-thread.h (GLWTHREAD_ATTR_DETACHED): New macro. (glwthread_thread_create): Add attr argument. * lib/windows-thread.c (glwthread_thread_create): Likewise. * lib/glthread/thread.h (glthread_create): Update. * lib/thrd.c (thrd_create): Update. --- ChangeLog | 9 +++++++++ lib/glthread/thread.h | 2 +- lib/thrd.c | 2 +- lib/windows-thread.c | 4 ++-- lib/windows-thread.h | 3 +++ 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index ea541d50ff..316ae110e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2019-07-14 Bruno Haible + + windows-thread: Add support for creating a thread in detached state. + * lib/windows-thread.h (GLWTHREAD_ATTR_DETACHED): New macro. + (glwthread_thread_create): Add attr argument. + * lib/windows-thread.c (glwthread_thread_create): Likewise. + * lib/glthread/thread.h (glthread_create): Update. + * lib/thrd.c (thrd_create): Update. + 2019-07-14 Bruno Haible windows-*: Rename glwthread_spinlock_t to glwthread_initguard_t. diff --git a/lib/glthread/thread.h b/lib/glthread/thread.h index eef9a46aff..2c72cc5cdb 100644 --- a/lib/glthread/thread.h +++ b/lib/glthread/thread.h @@ -237,7 +237,7 @@ extern "C" { typedef glwthread_thread_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ - glwthread_thread_create (THREADP, FUNC, ARG) + glwthread_thread_create (THREADP, 0, FUNC, ARG) # define glthread_sigmask(HOW, SET, OSET) \ /* unsupported */ 0 # define glthread_join(THREAD, RETVALP) \ diff --git a/lib/thrd.c b/lib/thrd.c index f3f69496b0..cb64185a99 100644 --- a/lib/thrd.c +++ b/lib/thrd.c @@ -289,7 +289,7 @@ thrd_create (thrd_t *threadp, thrd_start_t mainfunc, void *arg) pthread_main_arg->arg = arg; { - int err = glwthread_thread_create (threadp, + int err = glwthread_thread_create (threadp, 0, pthread_main_func, pthread_main_arg); if (err != 0) free (pthread_main_arg); diff --git a/lib/windows-thread.c b/lib/windows-thread.c index b42bd32baf..56723db7f7 100644 --- a/lib/windows-thread.c +++ b/lib/windows-thread.c @@ -152,7 +152,7 @@ wrapper_func (void *varg) } int -glwthread_thread_create (glwthread_thread_t *threadp, +glwthread_thread_create (glwthread_thread_t *threadp, unsigned int attr, void * (*func) (void *), void *arg) { struct glwthread_thread_struct *thread = @@ -162,7 +162,7 @@ glwthread_thread_create (glwthread_thread_t *threadp, return ENOMEM; thread->handle = NULL; InitializeCriticalSection (&thread->handle_lock); - thread->detached = FALSE; + thread->detached = (attr & GLWTHREAD_ATTR_DETACHED ? TRUE : FALSE); thread->result = NULL; /* just to be deterministic */ thread->func = func; thread->arg = arg; diff --git a/lib/windows-thread.h b/lib/windows-thread.h index 8bf98fbf46..70e5d00419 100644 --- a/lib/windows-thread.h +++ b/lib/windows-thread.h @@ -38,7 +38,10 @@ typedef struct glwthread_thread_struct *glwthread_thread_t; extern "C" { #endif +/* attr is a bit mask, consisting of the following bits: */ +#define GLWTHREAD_ATTR_DETACHED 1 extern int glwthread_thread_create (glwthread_thread_t *threadp, + unsigned int attr, void * (*func) (void *), void *arg); extern int glwthread_thread_join (glwthread_thread_t thread, void **retvalp); extern int glwthread_thread_detach (glwthread_thread_t thread); -- 2.39.5