Author: rjung
Date: Tue Oct 14 07:19:56 2008
New Revision: 704548

URL: http://svn.apache.org/viewvc?rev=704548&view=rev
Log:
Prevent IIS memory corruption due to multiple concurrent
initializations.

Modified:
    tomcat/connectors/trunk/jk/native/common/jk_shm.c
    tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c
    tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml

Modified: tomcat/connectors/trunk/jk/native/common/jk_shm.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_shm.c?rev=704548&r1=704547&r2=704548&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_shm.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_shm.c Tue Oct 14 07:19:56 2008
@@ -242,7 +242,7 @@
         if (jk_shmem.hdr->h.data.childs > 1) {
             if (JK_IS_DEBUG_LEVEL(l)) {
                 jk_log(l, JK_LOG_DEBUG,
-                       "Reseting the shared memory for child %d",
+                       "Resetting the shared memory for child %d",
                        jk_shmem.hdr->h.data.childs);
             }
         }
@@ -562,7 +562,7 @@
         if (nchild > 1) {
             if (JK_IS_DEBUG_LEVEL(l)) {
                 jk_log(l, JK_LOG_DEBUG,
-                       "Reseting the shared memory for child %d",
+                       "Resetting the shared memory for child %d",
                        nchild);
             }
         }

Modified: tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c?rev=704548&r1=704547&r2=704548&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c Tue Oct 14 07:19:56 
2008
@@ -474,6 +474,7 @@
 static char dll_file_path[MAX_PATH];
 static char ini_file_name[MAX_PATH];
 static int using_ini_file = JK_FALSE;
+static JK_CRIT_SEC init_cs;
 static int is_inited = JK_FALSE;
 static int is_mapread = JK_FALSE;
 
@@ -1405,6 +1406,7 @@
 
 BOOL WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pVer)
 {
+    int rc;
     BOOL rv = TRUE;
     ULONG http_filter_revision = HTTP_FILTER_REVISION;
 
@@ -1413,9 +1415,11 @@
     if (pVer->dwFilterVersion > http_filter_revision) {
         pVer->dwFilterVersion = http_filter_revision;
     }
+    JK_ENTER_CS(&(init_cs), rc);
     if (!is_inited) {
         rv = initialize_extension();
     }
+    JK_LEAVE_CS(&(init_cs), rc);
     pVer->dwFlags = SF_NOTIFY_ORDER_HIGH |
                     SF_NOTIFY_SECURE_PORT |
                     SF_NOTIFY_NONSECURE_PORT |
@@ -1752,11 +1756,11 @@
     return 0;
 }
 
-static int init_error = 0;
-
 DWORD WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc,
                             DWORD dwNotificationType, LPVOID pvNotification)
 {
+    int rc;
+
     /* Initialise jk */
     if (is_inited && !is_mapread) {
         char serverName[MAX_SERVERNAME] = "";
@@ -1775,8 +1779,10 @@
                     }
                 }
             }
-            if (init_jk(serverName))
+            JK_ENTER_CS(&(init_cs), rc);
+            if (!is_mapread && init_jk(serverName))
                 is_mapread = JK_TRUE;
+            JK_LEAVE_CS(&(init_cs), rc);
         }
         /* If we can't read the map we become dormant */
         if (!is_mapread)
@@ -2081,20 +2087,25 @@
 
 BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO * pVer)
 {
+    int rc;
+
     pVer->dwExtensionVersion = MAKELONG(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);
 
     StringCbCopy(pVer->lpszExtensionDesc, HSE_MAX_EXT_DLL_NAME_LEN, 
(VERSION_STRING));
 
 
+    JK_ENTER_CS(&(init_cs), rc);
     if (!is_inited) {
         return initialize_extension();
     }
+    JK_LEAVE_CS(&(init_cs), rc);
 
     return TRUE;
 }
 
 DWORD WINAPI HttpExtensionProc(LPEXTENSION_CONTROL_BLOCK lpEcb)
 {
+    int rv;
     DWORD rc = HSE_STATUS_ERROR;
 
     lpEcb->dwHttpStatusCode = HTTP_STATUS_SERVER_ERROR;
@@ -2121,8 +2132,10 @@
                     }
                 }
             }
-            if (init_jk(serverName))
+            JK_ENTER_CS(&(init_cs), rv);
+            if (!is_mapread && init_jk(serverName))
                 is_mapread = JK_TRUE;
+            JK_LEAVE_CS(&(init_cs), rv);
         }
         if (!is_mapread)
             is_inited = JK_FALSE;
@@ -2227,9 +2240,13 @@
 
 BOOL WINAPI TerminateFilter(DWORD dwFlags)
 {
+    int rc;
+
     UNREFERENCED_PARAMETER(dwFlags);
 
+    JK_ENTER_CS(&(init_cs), rc);
     if (is_inited) {
+        jk_log(logger, JK_LOG_INFO, "%s stopping", (VERSION_STRING));
         is_inited = JK_FALSE;
         watchdog_interval = 0;
         if (watchdog_handle) {
@@ -2264,6 +2281,7 @@
             jk_close_file_logger(&logger);
         }
     }
+    JK_LEAVE_CS(&(init_cs), rc);
 
     return TRUE;
 }
@@ -2273,6 +2291,7 @@
                     ULONG ulReason,     // Reason why NT called this DLL
                     LPVOID lpReserved)  // Reserved parameter for future use
 {
+    int rc;
     BOOL fReturn = TRUE;
     char fname[MAX_PATH];
 
@@ -2318,6 +2337,8 @@
         StringCbPrintf(HTTP_WORKER_HEADER_NAME, MAX_PATH, 
HTTP_HEADER_TEMPLATE, WORKER_HEADER_NAME_BASE, hInst);
         StringCbPrintf(HTTP_WORKER_HEADER_INDEX, MAX_PATH, 
HTTP_HEADER_TEMPLATE, WORKER_HEADER_INDEX_BASE, hInst);
 
+        JK_INIT_CS(&init_cs, rc);
+
     break;
     case DLL_PROCESS_DETACH:
         __try {
@@ -2325,6 +2346,7 @@
         }
         __except(1) {
         }
+        JK_DELETE_CS(&init_cs, rc);
         break;
 
     default:

Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?rev=704548&r1=704547&r2=704548&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Tue Oct 14 
07:19:56 2008
@@ -43,6 +43,9 @@
   <br />
   <subsection name="Native">
     <changelog>
+      <fix>IIS: Fix memory corruption due to parallel initialization
+        by multiple threads. (rjung)
+      </fix>
       <update>
         Added socket_connect_timeout directive for setting the
         connect timeout for the socket. This enables to have low



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to