From 49a0828d63ac2bccaaeb6d70c03d32f1d122f876 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 21 Dec 2019 06:29:11 +0100 Subject: [PATCH] pthread-thread, lock: On z/OS, use PTHREAD_RWLOCK_INITIALIZER_NP. Reported by Daniel Richard G. in * 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 | 12 ++++++++++++ lib/glthread/lock.c | 2 +- lib/glthread/lock.h | 11 ++++++++--- lib/pthread.in.h | 6 +++++- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index ee50002459..f4cd93559e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2019-12-21 Bruno Haible + + pthread-thread, lock: On z/OS, use PTHREAD_RWLOCK_INITIALIZER_NP. + Reported by Daniel Richard G. in + + + * 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 memcmp tests: Work around the clang bug. diff --git a/lib/glthread/lock.c b/lib/glthread/lock.c index 2537839de5..9d84090b55 100644 --- a/lib/glthread/lock.c +++ b/lib/glthread/lock.c @@ -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 */ diff --git a/lib/glthread/lock.h b/lib/glthread/lock.h index ffbec15143..890c4595f3 100644 --- a/lib/glthread/lock.h +++ b/lib/glthread/lock.h @@ -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 */ diff --git a/lib/pthread.in.h b/lib/pthread.in.h index a6fb3d96e4..1baa9388f8 100644 --- a/lib/pthread.in.h +++ b/lib/pthread.in.h @@ -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; -- 2.39.5