]> granicus.if.org Git - apache/commitdiff
ssl_util.c: pull up duplicated code in ssl_util_thr_id()
authorJacob Champion <jchampion@apache.org>
Tue, 18 Apr 2017 00:19:27 +0000 (00:19 +0000)
committerJacob Champion <jchampion@apache.org>
Tue, 18 Apr 2017 00:19:27 +0000 (00:19 +0000)
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

index 9e4e719f4bc9928a3651b3bee25ef06f0793d731..1a85f8bb07c5228e1d173c1434662af1c0749d18 100644 (file)
@@ -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);