]> Savannah Git Hosting - gnulib.git/commitdiff
thread: Fix pth port.
authorBruno Haible <bruno@clisp.org>
Thu, 5 Jan 2017 10:04:52 +0000 (11:04 +0100)
committerBruno Haible <bruno@clisp.org>
Thu, 5 Jan 2017 10:05:46 +0000 (11:05 +0100)
* 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.

ChangeLog
lib/glthread/thread.h

index 316a890d88a21a98dc34bb14c93c74fb6c7be382..e8d0f341304945b9f70c924c99074cfaf1f510e1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-01-05  Bruno Haible  <bruno@clisp.org>
+
+       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 <assafgordon@gmail.com>
 
        parse-datetime: fix debug message on lone year number
index 03e8f577211673236d2496486b7ce0f39903ab89..72bdd9b69eb41f2593a36197bce5fee5a25d834a 100644 (file)
@@ -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