From 3d8905f85945d899192b113ae495e99894687c4f Mon Sep 17 00:00:00 2001 From: Rich Salz <rsalz@akamai.com> Date: Thu, 18 Feb 2021 16:27:08 -0500 Subject: [PATCH] Fix error-checking compiles for mutex Fixes: #14229 Reviewed-by: Kurt Roeckx <kurt@roeckx.be> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/14264) --- INSTALL.md | 7 +++++++ crypto/threads_pthread.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 01c360e8d4..d6ef21d20e 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1666,6 +1666,13 @@ most UNIX/Linux systems), and Windows threads. No other threading models are supported. If your platform does not provide pthreads or Windows threads then you should use `Configure` with the `no-threads` option. +For pthreads, all locks are non-recursive. In addition, in a debug build, +the mutex attribute `PTHREAD_MUTEX_ERRORCHECK` is used. If this is not +available on your platform, you might have to add +`-DOPENSSL_NO_MUTEX_ERRORCHECK` to your `Configure` invocation. +(On Linux `PTHREAD_MUTEX_ERRORCHECK` is an enum value, so a built-in +ifdef test cannot be used.) + Notes on shared libraries ------------------------- diff --git a/crypto/threads_pthread.c b/crypto/threads_pthread.c index 3004e1bd2f..e81f3cf1ef 100644 --- a/crypto/threads_pthread.c +++ b/crypto/threads_pthread.c @@ -55,7 +55,7 @@ CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void) * We don't use recursive mutexes, but try to catch errors if we do. */ pthread_mutexattr_init(&attr); -# if defined(NDEBUG) && defined(PTHREAD_MUTEX_ERRORCHECK) +# if !defined(NDEBUG) && !defined(OPENSSL_NO_MUTEX_ERRORCHECK) pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); # else pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL);