summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Champion <jchampion@apache.org>2017-04-18 00:19:27 +0000
committerJacob Champion <jchampion@apache.org>2017-04-18 00:19:27 +0000
commit7f593693094bb85954792b179b28ae368dee446e (patch)
tree4a37c689340adea0ab6ca0a761e25b35c5f8f87c
parent4eeb7b5d2d607da42282e5705e0f1c3148093f21 (diff)
downloadhttpd-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.c41
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);