--- parser3/src/targets/isapi/parser3isapi.C 2003/11/20 16:34:28 1.84 +++ parser3/src/targets/isapi/parser3isapi.C 2004/04/01 11:43:54 1.89 @@ -1,11 +1,11 @@ /** @file Parser: IIS extension. - Copyright (c) 2000,2001-2003 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2000,2001-2004 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_PARSER3ISAPI_C="$Date: 2003/11/20 16:34:28 $"; +static const char * const IDENT_PARSER3ISAPI_C="$Date: 2004/04/01 11:43:54 $"; #ifndef _MSC_VER # error compile ISAPI module with MSVC [no urge for now to make it autoconf-ed (PAF)] @@ -81,7 +81,7 @@ void SAPI::log(SAPI_Info& SAPI_info, con } /// @todo event log -static void die_or_abort(const char* fmt, va_list args, bool write_core) { +static void abort(const char* fmt, va_list args) { if(FILE *log=fopen("c:\\parser3die.log", "at")) { vfprintf(log, fmt, args); fclose(log); @@ -92,14 +92,14 @@ static void die_or_abort(const char* fmt void SAPI::die(const char* fmt, ...) { va_list args; va_start(args, fmt); - die_or_abort(fmt, args, false/*write core?*/); + ::abort(fmt, args); va_end(args); } void SAPI::abort(const char* fmt, ...) { va_list args; va_start(args, fmt); - die_or_abort(fmt, args, true/*write core?*/); + ::abort(fmt, args); va_end(args); } @@ -258,20 +258,28 @@ static bool parser_init() { try { // init socks - pa_init_socks(); + pa_socks_init(); // init global variables pa_globals_init(); // successful finish return true; } catch(const Exception& e) { // global problem - const char* body=e.comment(); + //const char* body=e.comment(); // unsuccessful finish return false; } } +static void parser_done() { + // finalize global variables + pa_globals_done(); + + // + pa_socks_done(); +} + /// ISAPI // BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer) { pVer->dwExtensionVersion = HSE_VERSION; @@ -279,6 +287,15 @@ BOOL WINAPI GetExtensionVersion(HSE_VERS pVer->lpszExtensionDesc[HSE_MAX_EXT_DLL_NAME_LEN-1]=0; return parser_init(); } +// dwFlags & HSE_TERM_MUST_UNLOAD means we can't return false +BOOL WINAPI TerminateExtension( + DWORD /*dwFlags*/ +) +{ + parser_done(); + + return TRUE; +} /** ISAPI // main workhorse @@ -293,6 +310,16 @@ BOOL WINAPI GetExtensionVersion(HSE_VERS */ void real_parser_handler(SAPI_Info& SAPI_info, bool header_only) { + // collect garbage from prev request +#ifndef PA_DEBUG_DISABLE_GC + { + int saved=GC_dont_gc; + GC_dont_gc=0; + GC_gcollect(); + GC_dont_gc=saved; + } +#endif + SAPI_info.header=new String; LPEXTENSION_CONTROL_BLOCK lpECB=SAPI_info.lpECB; @@ -414,7 +441,7 @@ DWORD WINAPI HttpExtensionProc(LPEXTENSI char header_buf[MAX_STRING]; int header_len=snprintf(header_buf, MAX_STRING, "content-type: text/plain\r\n" - "content-length: %lu\r\n" + "content-length: %u\r\n" // "expires: Fri, 23 Mar 2001 09:32:23 GMT\r\n" "\r\n", content_length); @@ -447,7 +474,7 @@ DWORD WINAPI HttpExtensionProc(LPEXTENSI char header_buf[MAX_STRING]; int header_len=snprintf(header_buf, MAX_STRING, "content-type: text/plain\r\n" - "content-length: %lu\r\n" + "content-length: %u\r\n" "expires: Fri, 23 Mar 2001 09:32:23 GMT\r\n" "\r\n", content_length); @@ -473,8 +500,8 @@ DWORD WINAPI HttpExtensionProc(LPEXTENSI BOOL WINAPI DllMain( HINSTANCE hinstDLL, // handle to the DLL module - DWORD fdwReason, // reason for calling function - LPVOID lpvReserved // reserved + DWORD /*fdwReason*/, // reason for calling function + LPVOID /*lpvReserved*/ // reserved ) { GetModuleFileName(