File 0001-ssl_util.c-pull-up-duplicated-code-in-ssl_util_thr_i.patch of Package apache2.15682

From 7f593693094bb85954792b179b28ae368dee446e Mon Sep 17 00:00:00 2001
From: Jacob Champion <jchampion@apache.org>
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(-)

Index: httpd-2.4.23/modules/ssl/ssl_util.c
===================================================================
--- httpd-2.4.23.orig/modules/ssl/ssl_util.c
+++ httpd-2.4.23/modules/ssl/ssl_util.c
@@ -363,9 +363,11 @@ static void ssl_dyn_destroy_function(str
     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,45 +379,38 @@ static void ssl_util_thr_id(CRYPTO_THREA
         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);
openSUSE Build Service is sponsored by