From 7f593693094bb85954792b179b28ae368dee446e Mon Sep 17 00:00:00 2001 From: Jacob Champion Date: Tue, 18 Apr 2017 00:19:27 +0000 Subject: [PATCH] ssl_util.c: pull up duplicated code in ssl_util_thr_id() Should make it easier to see what's going on in the next few changes. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/trunk-openssl-threadid@1791730 13f79535-47bb-0310-9956-ffa450edef68 --- modules/ssl/ssl_util.c | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/modules/ssl/ssl_util.c b/modules/ssl/ssl_util.c index 9e4e719f4b..1a85f8bb07 100644 --- a/modules/ssl/ssl_util.c +++ b/modules/ssl/ssl_util.c @@ -363,9 +363,11 @@ static void ssl_dyn_destroy_function(struct CRYPTO_dynlock_value *l, apr_pool_destroy(l->pool); } -#if OPENSSL_VERSION_NUMBER >= 0x10000000L - -static void ssl_util_thr_id(CRYPTO_THREADID *id) +/** + * Used by both versions of ssl_util_thr_id(). Returns an unsigned long that + * should be unique to the currently executing thread. + */ +static unsigned long ssl_util_thr_id_internal(void) { /* OpenSSL needs this to return an unsigned long. On OS/390, the pthread * id is a structure twice that big. Use the TCB pointer instead as a @@ -377,46 +379,39 @@ static void ssl_util_thr_id(CRYPTO_THREADID *id) unsigned long PSATOLD; } *psaptr = 0; /* PSA is at address 0 */ - CRYPTO_THREADID_set_numeric(id, psaptr->PSATOLD); + return psaptr->PSATOLD; #else - CRYPTO_THREADID_set_numeric(id, (unsigned long) apr_os_thread_current()); + return (unsigned long) apr_os_thread_current(); #endif } -static apr_status_t ssl_util_thr_id_cleanup(void *old) +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + +static void ssl_util_thr_id(CRYPTO_THREADID *id) { - CRYPTO_THREADID_set_callback(old); - return APR_SUCCESS; + CRYPTO_THREADID_set_numeric(id, ssl_util_thr_id_internal()); } #else static unsigned long ssl_util_thr_id(void) { - /* OpenSSL needs this to return an unsigned long. On OS/390, the pthread - * id is a structure twice that big. Use the TCB pointer instead as a - * unique unsigned long. - */ -#ifdef __MVS__ - struct PSA { - char unmapped[540]; - unsigned long PSATOLD; - } *psaptr = 0; + return ssl_util_thr_id_internal(); +} - return psaptr->PSATOLD; -#else - return (unsigned long) apr_os_thread_current(); #endif -} static apr_status_t ssl_util_thr_id_cleanup(void *old) { +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + CRYPTO_THREADID_set_callback(old); +#else CRYPTO_set_id_callback(old); +#endif + return APR_SUCCESS; } -#endif - static apr_status_t ssl_util_thread_cleanup(void *data) { CRYPTO_set_locking_callback(NULL); -- 2.40.0