diff options
author | Jacob Champion <jchampion@apache.org> | 2017-04-18 00:19:27 +0000 |
---|---|---|
committer | Jacob Champion <jchampion@apache.org> | 2017-04-18 00:19:27 +0000 |
commit | 7f593693094bb85954792b179b28ae368dee446e (patch) | |
tree | 4a37c689340adea0ab6ca0a761e25b35c5f8f87c | |
parent | 4eeb7b5d2d607da42282e5705e0f1c3148093f21 (diff) | |
download | httpd-7f593693094bb85954792b179b28ae368dee446e.tar.gz |
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
-rw-r--r-- | modules/ssl/ssl_util.c | 41 |
1 files 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); |