mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-05-30 05:24:50 +03:00
threads: Use new API call for OpenSSL CRYPTO THREADID
BUG: https://red.libssh.org/issues/222 Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
parent
3341f49a49
commit
2dff359a33
@ -107,6 +107,9 @@ if (OPENSSL_FOUND)
|
|||||||
set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
|
set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
|
||||||
check_function_exists(EVP_aes_128_cbc HAVE_OPENSSL_EVP_AES_CBC)
|
check_function_exists(EVP_aes_128_cbc HAVE_OPENSSL_EVP_AES_CBC)
|
||||||
|
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
|
||||||
|
set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
|
||||||
|
check_function_exists(CRYPTO_THREADID_set_callback HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACK)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (CMAKE_HAVE_PTHREAD_H)
|
if (CMAKE_HAVE_PTHREAD_H)
|
||||||
|
@ -88,6 +88,9 @@
|
|||||||
/* Define to 1 if you have the `EVP_aes128_cbc' function. */
|
/* Define to 1 if you have the `EVP_aes128_cbc' function. */
|
||||||
#cmakedefine HAVE_OPENSSL_EVP_AES_CBC 1
|
#cmakedefine HAVE_OPENSSL_EVP_AES_CBC 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `CRYPTO_THREADID_set_callback' function. */
|
||||||
|
#cmakedefine HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACK 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `snprintf' function. */
|
/* Define to 1 if you have the `snprintf' function. */
|
||||||
#cmakedefine HAVE_SNPRINTF 1
|
#cmakedefine HAVE_SNPRINTF 1
|
||||||
|
|
||||||
|
@ -116,6 +116,15 @@ static void libcrypto_lock_callback(int mode, int i, const char *file, int line)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACK
|
||||||
|
static void libcrypto_THREADID_callback(CRYPTO_THREADID *id)
|
||||||
|
{
|
||||||
|
unsigned long thread_id = (*user_callbacks->thread_id)();
|
||||||
|
|
||||||
|
CRYPTO_THREADID_set_numeric(id, thread_id);
|
||||||
|
}
|
||||||
|
#endif /* HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACK */
|
||||||
|
|
||||||
static int libcrypto_thread_init(void){
|
static int libcrypto_thread_init(void){
|
||||||
int n=CRYPTO_num_locks();
|
int n=CRYPTO_num_locks();
|
||||||
int i;
|
int i;
|
||||||
@ -127,8 +136,14 @@ static int libcrypto_thread_init(void){
|
|||||||
for (i=0;i<n;++i){
|
for (i=0;i<n;++i){
|
||||||
user_callbacks->mutex_init(&libcrypto_mutexes[i]);
|
user_callbacks->mutex_init(&libcrypto_mutexes[i]);
|
||||||
}
|
}
|
||||||
CRYPTO_set_id_callback(user_callbacks->thread_id);
|
|
||||||
CRYPTO_set_locking_callback(libcrypto_lock_callback);
|
#ifdef HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACK
|
||||||
|
CRYPTO_THREADID_set_callback(libcrypto_THREADID_callback);
|
||||||
|
#else
|
||||||
|
CRYPTO_set_id_callback(user_callbacks->thread_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CRYPTO_set_locking_callback(libcrypto_lock_callback);
|
||||||
|
|
||||||
return SSH_OK;
|
return SSH_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user