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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org