mturk 2002/07/04 00:23:55
Modified: jk/native2/server/isapi jk_isapi_plugin.c
Log:
Set the starter thread extisting through entire extension life cycle.
The starter thread at init sleeps for 1 s, causing not blocking of
the main IIS thread that calls LoadLibrary for our extension.
Revision Changes Path
1.32 +26 -6
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.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- jk_isapi_plugin.c 1 Jul 2002 16:53:55 -0000 1.31
+++ jk_isapi_plugin.c 4 Jul 2002 07:23:55 -0000 1.32
@@ -520,8 +520,13 @@
return TerminateFilter(dwFlags);
}
+HANDLE jk2_starter_event;
+
BOOL WINAPI TerminateFilter(DWORD dwFlags)
{
+ /* detatch the starter thread */
+ SetEvent(jk2_starter_event);
+
if (is_inited) {
is_inited = JK_FALSE;
if (workerEnv) {
@@ -540,11 +545,14 @@
DWORD WINAPI jk2_isapi_starter( LPVOID lpParam )
{
+ Sleep(1000);
+
initialize_extension();
if (is_inited) {
if (init_jk(NULL))
is_mapread = JK_TRUE;
}
+ WaitForSingleObject(jk2_starter_event, INFINITE);
return 0;
}
@@ -558,21 +566,33 @@
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
DWORD dwThreadId;
+ DWORD dwRes;
+ int tcount = 0;
switch (ulReason) {
case DLL_PROCESS_DETACH:
- __try {
- if (jk2_starter_thread)
- CloseHandle(jk2_starter_thread);
- TerminateFilter(HSE_TERM_MUST_UNLOAD);
- } __except(1) {
+ while (!GetExitCodeThread(jk2_starter_thread, &dwRes)) {
+ if (dwRes == STILL_ACTIVE) {
+ ++tcount;
+ if (tcount > 30) {
+ TerminateThread(jk2_starter_thread, -1);
+ break;
+ }
+ Sleep(100);
+ }
}
+ CloseHandle(jk2_starter_thread);
break;
case DLL_PROCESS_ATTACH:
if (GetModuleFileName( hInst, file_name, sizeof(file_name))) {
_splitpath( file_name, drive, dir, fname, NULL );
_makepath( ini_file_name, drive, dir, fname, ".properties" );
+
+ jk2_starter_event = CreateEvent(NULL,
+ FALSE,
+ FALSE,
+ NULL);
jk2_starter_thread = CreateThread( NULL,
0,
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>