You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2012/03/06 13:21:02 UTC

svn commit: r1297439 - in /tomcat/jk/trunk/native: common/jk_global.h common/jk_uri_worker_map.c iis/jk_isapi_plugin.c

Author: mturk
Date: Tue Mar  6 12:21:02 2012
New Revision: 1297439

URL: http://svn.apache.org/viewvc?rev=1297439&view=rev
Log:
Use global mutex instead critical section so that multiple instance don't init at once in case IIS starts multiple processes

Modified:
    tomcat/jk/trunk/native/common/jk_global.h
    tomcat/jk/trunk/native/common/jk_uri_worker_map.c
    tomcat/jk/trunk/native/iis/jk_isapi_plugin.c

Modified: tomcat/jk/trunk/native/common/jk_global.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_global.h?rev=1297439&r1=1297438&r2=1297439&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_global.h (original)
+++ tomcat/jk/trunk/native/common/jk_global.h Tue Mar  6 12:21:02 2012
@@ -384,7 +384,9 @@ typedef int jk_sock_t;
 #define IS_VALID_SOCKET(s) ((s) > 0)
 #define JK_INVALID_SOCKET  (-1)
 #endif
-
+#if defined(_MSC_VER) && (_MSC_VER > 1200)
+#define stat  _stat
+#endif
 #ifdef NETWARE
 #ifdef __NOVELL_LIBC__
 #define MAX_PATH 511

Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.c?rev=1297439&r1=1297438&r2=1297439&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.c (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.c Tue Mar  6 12:21:02 2012
@@ -1075,7 +1075,7 @@ const char *map_uri_to_worker_ext(jk_uri
             off = 1;
         }
         /* Size including leading slash. */
-        vhost_len = strlen(vhost);
+        vhost_len = (unsigned int)strlen(vhost);
         if (vhost_len + off >= JK_MAX_URI_LEN) {
             vhost_len = 0;
             jk_log(l, JK_LOG_WARNING,

Modified: tomcat/jk/trunk/native/iis/jk_isapi_plugin.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/iis/jk_isapi_plugin.c?rev=1297439&r1=1297438&r2=1297439&view=diff
==============================================================================
--- tomcat/jk/trunk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Tue Mar  6 12:21:02 2012
@@ -468,7 +468,7 @@ static struct error_reasons {
 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 HANDLE init_cs = NULL;
 static int is_inited = JK_FALSE;
 static int is_mapread = JK_FALSE;
 
@@ -505,6 +505,8 @@ static HANDLE watchdog_handle = NULL;
 static char error_page_buf[INTERNET_MAX_URL_LENGTH] = {0};
 static char *error_page = NULL;
 
+static const char *JK_MUTEX_NAME = "Global\\ISAPI_REDIRECT_MUTEX";
+
 #define URI_SELECT_OPT_PARSED       0
 #define URI_SELECT_OPT_UNPARSED     1
 #define URI_SELECT_OPT_ESCAPED      2
@@ -1490,11 +1492,11 @@ BOOL WINAPI GetFilterVersion(PHTTP_FILTE
     if (pVer->dwFilterVersion > http_filter_revision) {
         pVer->dwFilterVersion = http_filter_revision;
     }
-    EnterCriticalSection(&init_cs);
+    WaitForSingleObject(init_cs, INFINITE);
     if (!is_inited) {
         rv = initialize_extension();
     }
-    LeaveCriticalSection(&init_cs);
+    ReleaseMutex(init_cs);
     if (iis_info.major < 5 || (iis_info.major == 5 && iis_info.minor < 1)) {
         SetLastError(ERROR_OLD_WIN_VERSION);
         return FALSE;
@@ -2166,10 +2168,10 @@ DWORD WINAPI HttpFilterProc(PHTTP_FILTER
                     StringCbCat(serverName, MAX_SERVERNAME, instanceId);
                 }
             }
-            EnterCriticalSection(&init_cs);
+            WaitForSingleObject(init_cs, INFINITE);
             if (!is_mapread)
                 is_mapread = init_jk(serverName);
-            LeaveCriticalSection(&init_cs);
+            ReleaseMutex(init_cs);
         }
         /* If we can't read the map we become dormant */
         if (!is_mapread)
@@ -2209,11 +2211,11 @@ BOOL WINAPI GetExtensionVersion(HSE_VERS
     StringCbCopy(pVer->lpszExtensionDesc, HSE_MAX_EXT_DLL_NAME_LEN, (VERSION_STRING));
 
 
-    EnterCriticalSection(&init_cs);
+    WaitForSingleObject(init_cs, INFINITE);
     if (!is_inited) {
         rv = initialize_extension();
     }
-    LeaveCriticalSection(&init_cs);
+    ReleaseMutex(init_cs);
 
     return rv;
 }
@@ -2246,10 +2248,10 @@ DWORD WINAPI HttpExtensionProc(LPEXTENSI
                     StringCbCat(serverName, MAX_SERVERNAME, instanceId);
                 }
             }
-            EnterCriticalSection(&init_cs);
+            WaitForSingleObject(init_cs, INFINITE);
             if (!is_mapread)
                 is_mapread = init_jk(serverName);
-            LeaveCriticalSection(&init_cs);
+            ReleaseMutex(init_cs);
         }
         if (!is_mapread)
             is_inited = JK_FALSE;
@@ -2349,7 +2351,7 @@ BOOL WINAPI TerminateFilter(DWORD dwFlag
 {
     UNREFERENCED_PARAMETER(dwFlags);
 
-    EnterCriticalSection(&init_cs);
+    WaitForSingleObject(init_cs, INFINITE);
     if (is_inited) {
         jk_log(logger, JK_LOG_INFO, "%s stopping", (FULL_VERSION_STRING));
         is_inited = JK_FALSE;
@@ -2388,7 +2390,7 @@ BOOL WINAPI TerminateFilter(DWORD dwFlag
         }
         LeaveCriticalSection(&log_cs);
     }
-    LeaveCriticalSection(&init_cs);
+    ReleaseMutex(&init_cs);
 
     return TRUE;
 }
@@ -2442,8 +2444,12 @@ BOOL WINAPI DllMain(HINSTANCE hInst,    
         StringCbPrintf(HTTP_WORKER_HEADER_NAME, RES_BUFFER_SIZE, HTTP_HEADER_TEMPLATE, WORKER_HEADER_NAME_BASE, hInst);
         StringCbPrintf(HTTP_WORKER_HEADER_INDEX, RES_BUFFER_SIZE, HTTP_HEADER_TEMPLATE, WORKER_HEADER_INDEX_BASE, hInst);
 
-        InitializeCriticalSection(&init_cs);
         InitializeCriticalSection(&log_cs);
+        init_cs = CreateMutex(jk_get_sa_with_null_dacl(), FALSE, JK_MUTEX_NAME);
+        if (init_cs == NULL && GetLastError() == ERROR_ALREADY_EXISTS)
+            init_cs = OpenMutex(MUTEX_ALL_ACCESS, FALSE, JK_MUTEX_NAME);
+        if (init_cs == NULL)
+            return JK_FALSE;
     break;
     case DLL_PROCESS_DETACH:
         __try {
@@ -2451,7 +2457,8 @@ BOOL WINAPI DllMain(HINSTANCE hInst,    
         }
         __except(1) {
         }
-        DeleteCriticalSection(&init_cs);
+        if (init_cs != NULL)
+            CloseHandle(init_cs);
         DeleteCriticalSection(&log_cs);
         break;
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org