OpenSSL 1.1.0 uses new threading API. It is no longer necessary to set locking callbacks to use OpenSSL in a multi-threaded environment. The old threading API should no longer be used. So don't allocate/set locking callbacks with new OpenSSL.
Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsoleni...@linaro.org> --- platform/linux-generic/odp_crypto.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/platform/linux-generic/odp_crypto.c b/platform/linux-generic/odp_crypto.c index d83b8e09..d1d32497 100644 --- a/platform/linux-generic/odp_crypto.c +++ b/platform/linux-generic/odp_crypto.c @@ -26,6 +26,7 @@ #include <openssl/rand.h> #include <openssl/hmac.h> #include <openssl/evp.h> +#include <openssl/opensslv.h> #define MAX_SESSIONS 32 @@ -948,16 +949,18 @@ odp_crypto_operation(odp_crypto_op_param_t *param, return 0; } -static unsigned long openssl_thread_id(void) +static +unsigned long ODP_UNUSED openssl_thread_id(void) { return (unsigned long)odp_thread_id(); } odp_ticketlock_t *openssl_locks; -static void openssl_lock(int mode, int n, - const char *file ODP_UNUSED, - int line ODP_UNUSED) +static +void ODP_UNUSED openssl_lock(int mode, int n, + const char *file ODP_UNUSED, + int line ODP_UNUSED) { if (mode & CRYPTO_LOCK) odp_ticketlock_lock(&openssl_locks[n]); @@ -972,6 +975,10 @@ static void openssl_init_locks(void) odp_shm_t shm; int idx; + /* OpenSSL does not need locks after 1.1.0 */ + if (OPENSSL_VERSION_NUMBER >= 0x10100000L) + return; + nlocks = CRYPTO_num_locks(); if (nlocks <= 0) return; @@ -996,6 +1003,10 @@ static void openssl_init_locks(void) static int openssl_term_locks(void) { + /* OpenSSL does not need locks after 1.1.0 */ + if (OPENSSL_VERSION_NUMBER >= 0x10100000L) + return 0; + CRYPTO_set_locking_callback(NULL); CRYPTO_set_id_callback(NULL); -- 2.11.0