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