From 05409e41ac15cb4146b6a46a7e2be671c91c5884 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Thu, 7 Dec 2006 10:11:36 +0000 Subject: [PATCH] - check CRYPTO_get_id_callback() whether someone else already set thread lock callbacks # this might also be of interest to ext/curl --- http_request_api.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) 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) { -- 2.30.2