]> Savannah Git Hosting - gnulib.git/commitdiff
pthread-thread, lock: On z/OS, use PTHREAD_RWLOCK_INITIALIZER_NP.
authorBruno Haible <bruno@clisp.org>
Sat, 21 Dec 2019 05:29:11 +0000 (06:29 +0100)
committerBruno Haible <bruno@clisp.org>
Sat, 21 Dec 2019 05:29:11 +0000 (06:29 +0100)
Reported by Daniel Richard G. in
<https://lists.gnu.org/archive/html/bug-gnulib/2019-11/msg00001.html>
<https://lists.gnu.org/archive/html/bug-gnulib/2019-12/msg00167.html>

* lib/pthread.in.h (PTHREAD_RWLOCK_INITIALIZER): Define to
PTHREAD_RWLOCK_INITIALIZER_NP when possible.
* lib/glthread/lock.h: Allow PTHREAD_RWLOCK_INITIALIZER_NP as an
alternative to PTHREAD_RWLOCK_INITIALIZER.
* lib/glthread/lock.c: Likewise.

ChangeLog
lib/glthread/lock.c
lib/glthread/lock.h
lib/pthread.in.h

index ee50002459cacce065f7289dfc4b137f6d646a99..f4cd93559ea2bbd280b870cc7adb29a51933e2f0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2019-12-21  Bruno Haible  <bruno@clisp.org>
+
+       pthread-thread, lock: On z/OS, use PTHREAD_RWLOCK_INITIALIZER_NP.
+       Reported by Daniel Richard G. in
+       <https://lists.gnu.org/archive/html/bug-gnulib/2019-11/msg00001.html>
+       <https://lists.gnu.org/archive/html/bug-gnulib/2019-12/msg00167.html>
+       * lib/pthread.in.h (PTHREAD_RWLOCK_INITIALIZER): Define to
+       PTHREAD_RWLOCK_INITIALIZER_NP when possible.
+       * lib/glthread/lock.h: Allow PTHREAD_RWLOCK_INITIALIZER_NP as an
+       alternative to PTHREAD_RWLOCK_INITIALIZER.
+       * lib/glthread/lock.c: Likewise.
+
 2019-12-21  Bruno Haible  <bruno@clisp.org>
 
        memcmp tests: Work around the clang bug.
index 2537839de55af2fdecb12fd351f03769f69c91d3..9d84090b55ef946d2eafb29de1eb76dd0055d7aa 100644 (file)
@@ -254,7 +254,7 @@ glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
 
 # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1)))
 
-#  ifdef PTHREAD_RWLOCK_INITIALIZER
+#  if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP
 
 #   if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
      /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */
index ffbec15143b68ac812adb113f80a58d65ee2caad..890c4595f3738d227d5e78c382f42aaff7a2734d 100644 (file)
@@ -308,7 +308,7 @@ typedef pthread_mutex_t gl_lock_t;
 
 # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1)))
 
-#  ifdef PTHREAD_RWLOCK_INITIALIZER
+#  if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP
 
 typedef pthread_rwlock_t gl_rwlock_t;
 #   define gl_rwlock_define(STORAGECLASS, NAME) \
@@ -316,8 +316,13 @@ typedef pthread_rwlock_t gl_rwlock_t;
 #   define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
       STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer;
 #   if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
-#    define gl_rwlock_initializer \
-       PTHREAD_RWLOCK_INITIALIZER
+#    if defined PTHREAD_RWLOCK_INITIALIZER
+#     define gl_rwlock_initializer \
+        PTHREAD_RWLOCK_INITIALIZER
+#    else
+#     define gl_rwlock_initializer \
+        PTHREAD_RWLOCK_INITIALIZER_NP
+#    endif
 #    define glthread_rwlock_init(LOCK) \
        (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0)
 #   else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */
index a6fb3d96e4f428204d22e986bff8b33f3f3da5a4..1baa9388f884d9c419701c4141b637e000d8671b 100644 (file)
@@ -281,7 +281,11 @@ typedef unsigned int pthread_rwlockattr_t;
 # define PTHREAD_RWLOCK_INITIALIZER \
    { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 }
 #else
-# if !@HAVE_PTHREAD_T@
+# if @HAVE_PTHREAD_T@
+#  if !defined PTHREAD_RWLOCK_INITIALIZER && defined PTHREAD_RWLOCK_INITIALIZER_NP /* z/OS */
+#   define PTHREAD_RWLOCK_INITIALIZER PTHREAD_RWLOCK_INITIALIZER_NP
+#  endif
+# else
 #  if !GNULIB_defined_pthread_rwlock_types
 typedef int pthread_rwlock_t;
 typedef unsigned int pthread_rwlockattr_t;