You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@apache.org on 2002/05/09 12:53:28 UTC
cvs commit: httpd-2.0/modules/ssl ssl_util.c
trawick 02/05/09 03:53:28
Modified: . CHANGES
modules/ssl ssl_util.c
Log:
Fix a mod_ssl build problem on OS/390.
This is admittedly rather ugly code to come up with a unique 4-byte
identifier for the thread. Since our threads are pthreads and a pthread
maps 1:1 to a TCB, the address of the TCB is sufficient. Yes, every
TCB sees a different piece of real storage mapped to the first page,
so the code does make sense.
Revision Changes Path
1.766 +2 -0 httpd-2.0/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/httpd-2.0/CHANGES,v
retrieving revision 1.765
retrieving revision 1.766
diff -u -r1.765 -r1.766
--- CHANGES 8 May 2002 02:17:03 -0000 1.765
+++ CHANGES 9 May 2002 10:53:27 -0000 1.766
@@ -1,5 +1,7 @@
Changes with Apache 2.0.37
+ *) Fix a mod_ssl build problem on OS/390. [Jeff Trawick]
+
*) Fixed If-Modified-Since on Win32, which would give false positives
because of the sub-second resolution of file timestamps on that
platform. [Cliff Woolley]
1.32 +13 -0 httpd-2.0/modules/ssl/ssl_util.c
Index: ssl_util.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/ssl/ssl_util.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- ssl_util.c 28 Mar 2002 17:11:12 -0000 1.31
+++ ssl_util.c 9 May 2002 10:53:28 -0000 1.32
@@ -419,7 +419,20 @@
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 psaptr->PSATOLD;
+#else
return (unsigned long) apr_os_thread_current();
+#endif
}
static apr_status_t ssl_util_thread_cleanup(void *data)