From: Bruno Haible Date: Mon, 15 Jul 2019 00:35:58 +0000 (+0200) Subject: windows-thread: Add support for creating a thread in detached state. X-Git-Tag: v1.0~4762 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=6f520fb1dd6fcc2caeb2fc9fed9140f5d96f84a7;p=gnulib.git 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. --- 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);