From: Bruno Haible Date: Thu, 5 Jan 2017 10:04:52 +0000 (+0100) Subject: thread: Fix pth port. X-Git-Tag: v1.0~6413 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=fd8eabdce96cfaf41234241a8d659958934beddd;p=gnulib.git thread: Fix pth port. * lib/glthread/thread.h (pth_init): Declare weak. (glthread_create, glthread_sigmask, glthread_join, gl_thread_self, gl_thread_exit): Make sure Pth is initialized before invoking any Pth function. --- diff --git a/ChangeLog b/ChangeLog index 316a890d88..e8d0f34130 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2017-01-05 Bruno Haible + + thread: Fix pth port. + * lib/glthread/thread.h (pth_init): Declare weak. + (glthread_create, glthread_sigmask, glthread_join, gl_thread_self, + gl_thread_exit): Make sure Pth is initialized before invoking any Pth + function. + 2017-01-04 Assaf Gordon parse-datetime: fix debug message on lone year number diff --git a/lib/glthread/thread.h b/lib/glthread/thread.h index 03e8f57721..72bdd9b69e 100644 --- a/lib/glthread/thread.h +++ b/lib/glthread/thread.h @@ -219,6 +219,7 @@ extern "C" { /* Use weak references to the GNU Pth threads library. */ +# pragma weak pth_init # pragma weak pth_spawn # pragma weak pth_sigmask # pragma weak pth_join @@ -237,17 +238,17 @@ extern "C" { typedef pth_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ - (pth_in_use () ? ((*(THREADP) = pth_spawn (NULL, FUNC, ARG)) ? 0 : errno) : 0) + (pth_in_use () ? (pth_init (), ((*(THREADP) = pth_spawn (NULL, FUNC, ARG)) ? 0 : errno)) : 0) # define glthread_sigmask(HOW, SET, OSET) \ - (pth_in_use () && !pth_sigmask (HOW, SET, OSET) ? errno : 0) + (pth_in_use () ? (pth_init (), (pth_sigmask (HOW, SET, OSET) ? 0 : errno)) : 0) # define glthread_join(THREAD, RETVALP) \ - (pth_in_use () && !pth_join (THREAD, RETVALP) ? errno : 0) + (pth_in_use () ? (pth_init (), (pth_join (THREAD, RETVALP) ? 0 : errno)) : 0) # define gl_thread_self() \ - (pth_in_use () ? (void *) pth_self () : NULL) + (pth_in_use () ? (pth_init (), (void *) pth_self ()) : NULL) # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ - (pth_in_use () ? pth_exit (RETVAL) : 0) + (pth_in_use () ? (pth_init (), pth_exit (RETVAL)) : 0) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus