From: Michael Wallner Date: Thu, 7 Dec 2006 10:11:36 +0000 (+0000) Subject: - check CRYPTO_get_id_callback() whether someone else already set thread lock callbacks X-Git-Tag: RELEASE_1_4_0RC2~10 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=commitdiff_plain;h=05409e41ac15cb4146b6a46a7e2be671c91c5884 - check CRYPTO_get_id_callback() whether someone else already set thread lock callbacks # this might also be of interest to ext/curl --- diff --git a/http_request_api.c b/http_request_api.c index fa8ea70..bfb3574 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -87,16 +87,19 @@ static struct gcry_thread_cbs http_gnutls_tsl = { PHP_MINIT_FUNCTION(http_request) { #ifdef HTTP_NEED_OPENSSL_TSL - int i, c = CRYPTO_num_locks(); - - http_openssl_tsl = malloc(c * sizeof(MUTEX_T)); - - for (i = 0; i < c; ++i) { - http_openssl_tsl[i] = tsrm_mutex_alloc(); + /* mod_ssl, libpq or ext/curl might already have set thread lock callbacks */ + if (!CRYPTO_get_id_callback()) { + int i, c = CRYPTO_num_locks(); + + http_openssl_tsl = malloc(c * sizeof(MUTEX_T)); + + for (i = 0; i < c; ++i) { + http_openssl_tsl[i] = tsrm_mutex_alloc(); + } + + CRYPTO_set_id_callback(http_openssl_thread_id); + CRYPTO_set_locking_callback(http_openssl_thread_lock); } - - CRYPTO_set_id_callback(http_openssl_thread_id); - CRYPTO_set_locking_callback(http_openssl_thread_lock); #endif #ifdef HTTP_NEED_GNUTLS_TSL gcry_control(GCRYCTL_SET_THREAD_CBS, &http_gnutls_tsl); @@ -138,10 +141,6 @@ PHP_MINIT_FUNCTION(http_request) /* {{{ MSHUTDOWN */ PHP_MSHUTDOWN_FUNCTION(http_request) { -#ifdef HTTP_NEED_OPENSSL_TSL - CRYPTO_set_id_callback(http_openssl_thread_id); - CRYPTO_set_locking_callback(http_openssl_thread_lock); -#endif curl_global_cleanup(); #ifdef HTTP_NEED_OPENSSL_TSL if (http_openssl_tsl) {