mturk 2002/07/04 05:44:56 Modified: jk/native2/server/isapi jk_isapi_plugin.c Log: Use the WaitForSingleObject instead of GetThreatExitCode. There was a bug that caused terminating the starter thread before the entire clenup finished. The entire extinsion start/stop management is now done in a separate thread. Revision Changes Path 1.33 +17 -29 jakarta-tomcat-connectors/jk/native2/server/isapi/jk_isapi_plugin.c Index: jk_isapi_plugin.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/isapi/jk_isapi_plugin.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- jk_isapi_plugin.c 4 Jul 2002 07:23:55 -0000 1.32 +++ jk_isapi_plugin.c 4 Jul 2002 12:44:56 -0000 1.33 @@ -521,28 +521,17 @@ } HANDLE jk2_starter_event; +HANDLE jk2_starter_thread = NULL; BOOL WINAPI TerminateFilter(DWORD dwFlags) { /* detatch the starter thread */ SetEvent(jk2_starter_event); - - if (is_inited) { - is_inited = JK_FALSE; - if (workerEnv) { - jk_env_t *env = workerEnv->globalEnv; - workerEnv->close(env, workerEnv); - } - apr_pool_destroy(jk_globalPool); - workerEnv=NULL; - is_mapread = JK_FALSE; - } + WaitForSingleObject(jk2_starter_thread, 3000); return TRUE; } -HANDLE jk2_starter_thread = NULL; - DWORD WINAPI jk2_isapi_starter( LPVOID lpParam ) { Sleep(1000); @@ -552,7 +541,17 @@ if (init_jk(NULL)) is_mapread = JK_TRUE; } + WaitForSingleObject(jk2_starter_event, INFINITE); + + if (is_inited) { + is_inited = JK_FALSE; + if (workerEnv) { + jk_env_t *env = workerEnv->globalEnv; + workerEnv->close(env, workerEnv); + } + is_mapread = JK_FALSE; + } return 0; } @@ -566,25 +565,17 @@ char dir[_MAX_DIR]; char fname[_MAX_FNAME]; DWORD dwThreadId; - DWORD dwRes; - int tcount = 0; switch (ulReason) { case DLL_PROCESS_DETACH: - while (!GetExitCodeThread(jk2_starter_thread, &dwRes)) { - if (dwRes == STILL_ACTIVE) { - ++tcount; - if (tcount > 30) { - TerminateThread(jk2_starter_thread, -1); - break; - } - Sleep(100); - } - } + WaitForSingleObject(jk2_starter_thread, INFINITE); CloseHandle(jk2_starter_thread); + apr_terminate(); break; case DLL_PROCESS_ATTACH: + apr_initialize(); + apr_pool_create( &jk_globalPool, NULL ); if (GetModuleFileName( hInst, file_name, sizeof(file_name))) { _splitpath( file_name, drive, dir, fname, NULL ); _makepath( ini_file_name, drive, dir, fname, ".properties" ); @@ -754,9 +745,6 @@ jk_pool_t *globalPool; jk_bean_t *jkb; jk_env_t *env; - - apr_initialize(); - apr_pool_create( &jk_globalPool, NULL ); jk2_pool_apr_create( NULL, &globalPool, NULL, jk_globalPool );
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>