--- parser3/src/targets/apache/mod_parser3_core.C 2010/11/14 22:44:23 1.2 +++ parser3/src/targets/apache/mod_parser3_core.C 2017/02/08 13:05:46 1.17 @@ -1,11 +1,11 @@ /** @file -Parser: apache 1.3 module, part, compiled by parser3project. +Parser: apache 1.3/2.X module, part, compiled by parser3project. - Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_MOD_PARSER3_MAIN_C="$Date: 2010/11/14 22:44:23 $"; +volatile const char * IDENT_MOD_PARSER3_CORE_C="$Id: mod_parser3_core.C,v 1.17 2017/02/08 13:05:46 moko Exp $"; #include "pa_config_includes.h" @@ -17,22 +17,18 @@ static const char * const IDENT_MOD_PARS #include "pa_sapi.h" #include "classes.h" #include "pa_request.h" -#include "pa_version.h" #include "pa_socks.h" -#if _MSC_VER && !defined(_DEBUG) +#if defined(_MSC_VER) && !defined(_DEBUG) # include # define PA_SUPPRESS_SYSTEM_EXCEPTION #endif // generals -const char* pa_version() { - return "Parser/"PARSER_VERSION; -} +static bool globals_inited=false; void pa_setup_module_cells() { - static bool globals_inited=false; if(globals_inited) return; globals_inited=true; @@ -50,6 +46,9 @@ void pa_setup_module_cells() { } void pa_destroy_module_cells() { + if(!globals_inited) + return; + pa_globals_done(); pa_socks_done(); @@ -101,7 +100,7 @@ void SAPI::abort(const char* fmt, ...) { va_end(args); } -char* SAPI::get_env(SAPI_Info& SAPI_info, const char* name) { +char* SAPI::Env::get(SAPI_Info& SAPI_info, const char* name) { const char* dont_return_me=pa_ap_table_get(SAPI_info.r->subprocess_env, name); return dont_return_me?pa_strdup(dont_return_me):0; } @@ -124,9 +123,9 @@ static int SAPI_environment_append(void } return 1/*true*/; } -const char* const* SAPI::environment(SAPI_Info& SAPI_info) { +const char* const* SAPI::Env::get(SAPI_Info& SAPI_info) { const pa_table *t=SAPI_info.r->subprocess_env; - const char** result=new(UseGC) const char*[pa_ap_table_size(t)+1/*0*/]; + const char** result=new const char*[pa_ap_table_size(t)+1/*0*/]; SAPI_environment_append_info info={result}; pa_ap_table_do(SAPI_environment_append, &info, t, 0); *info.cur=0; // mark EOE return result; @@ -193,8 +192,10 @@ size_t SAPI::send_body(SAPI_Info& SAPI_i //@} -#if !defined(PA_DEBUG_DISABLE_GC) && !defined(WIN32) -extern long GC_large_alloc_warn_suppressed; +#ifndef PA_DEBUG_DISABLE_GC +#ifndef _MSC_VER +extern long GC_large_alloc_warn_suppressed; +#endif #endif /** @@ -204,14 +205,13 @@ main workhorse */ static void real_parser_handler(SAPI_Info& SAPI_info, Parser_module_config *dcfg) { // collect garbage from prev request -#if !defined(PA_DEBUG_DISABLE_GC) && !defined(WIN32) - { - int saved=GC_dont_gc; - GC_dont_gc=0; - GC_gcollect(); - GC_dont_gc=saved; - GC_large_alloc_warn_suppressed=0; - } +#ifndef PA_DEBUG_DISABLE_GC + GC_dont_gc=0; + GC_gcollect(); + GC_dont_gc=1; +#ifndef _MSC_VER + GC_large_alloc_warn_suppressed=0; +#endif #endif // populate env @@ -221,23 +221,22 @@ static void real_parser_handler(SAPI_Inf // Request info Request_info request_info; memset(&request_info, 0, sizeof(request_info)); - request_info.document_root=SAPI::get_env(SAPI_info, "DOCUMENT_ROOT"); + request_info.document_root=SAPI::Env::get(SAPI_info, "DOCUMENT_ROOT"); request_info.path_translated=SAPI_info.r->filename; request_info.method=SAPI_info.r->method; request_info.query_string=SAPI_info.r->args; - request_info.uri=SAPI::get_env(SAPI_info, "REQUEST_URI"); - request_info.content_type=SAPI::get_env(SAPI_info, "CONTENT_TYPE"); - const char* content_length=SAPI::get_env(SAPI_info, "CONTENT_LENGTH"); + request_info.uri=request_info.strip_absolute_uri(SAPI::Env::get(SAPI_info, "REQUEST_URI")); + request_info.content_type=SAPI::Env::get(SAPI_info, "CONTENT_TYPE"); + const char* content_length=SAPI::Env::get(SAPI_info, "CONTENT_LENGTH"); request_info.content_length=content_length?atoi(content_length):0; - request_info.cookie=SAPI::get_env(SAPI_info, "HTTP_COOKIE"); + request_info.cookie=SAPI::Env::get(SAPI_info, "HTTP_COOKIE"); request_info.mail_received=false; // prepare to process request Request request( SAPI_info, request_info, - String::Language(String::L_HTML|String::L_OPTIMIZE_BIT), - dcfg->parser_status_allowed?true:false + String::Language(String::L_HTML|String::L_OPTIMIZE_BIT) ); // process the request