--- parser3/src/main/pa_globals.C 2019/12/04 00:21:28 1.201 +++ parser3/src/main/pa_globals.C 2023/09/26 20:49:10 1.213 @@ -1,8 +1,8 @@ /** @file Parser: globals. - Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com) - Author: Alexandr Petrosian (http://paf.design.ru) + Copyright (c) 2001-2023 Art. Lebedev Studio (http://www.artlebedev.com) + Authors: Konstantin Morshnev , Alexandr Petrosian */ #include "pa_config_includes.h" @@ -17,8 +17,8 @@ extern "C" { #endif #include "pa_globals.h" +#include "pa_socks.h" #include "pa_sapi.h" -#include "pa_threads.h" #include "pa_xml_io.h" #include "pa_common.h" #include "pa_symbols.h" @@ -28,7 +28,7 @@ extern "C" { #include "ltdl.h" #include "pcre.h" -volatile const char * IDENT_PA_GLOBALS_C="$Id: pa_globals.C,v 1.201 2019/12/04 00:21:28 moko Exp $" IDENT_PA_GLOBALS_H IDENT_PA_SAPI_H; +volatile const char * IDENT_PA_GLOBALS_C="$Id: pa_globals.C,v 1.213 2023/09/26 20:49:10 moko Exp $" IDENT_PA_GLOBALS_H IDENT_PA_SAPI_H; // defines @@ -36,40 +36,26 @@ volatile const char * IDENT_PA_GLOBALS_C // globals -short hex_value[0x100]={0}; - -static void setup_hex_value() { - hex_value['0'] = 0; - hex_value['1'] = 1; - hex_value['2'] = 2; - hex_value['3'] = 3; - hex_value['4'] = 4; - hex_value['5'] = 5; - hex_value['6'] = 6; - hex_value['7'] = 7; - hex_value['8'] = 8; - hex_value['9'] = 9; - hex_value['A'] = 10; - hex_value['B'] = 11; - hex_value['C'] = 12; - hex_value['D'] = 13; - hex_value['E'] = 14; - hex_value['F'] = 15; - hex_value['a'] = 10; - hex_value['b'] = 11; - hex_value['c'] = 12; - hex_value['d'] = 13; - hex_value['e'] = 14; - hex_value['f'] = 15; -} +short hex_value[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; -THREAD_LOCAL Request* thread_request=NULL; +THREAD_LOCAL Request* thread_request=NULL; // every TLS should be referenced elsewhere, or GC will collect it void pa_register_thread_request(Request& r) { thread_request=&r; } + /// retrives request set by pa_set_request function, useful in contextless places [slow] Request& pa_thread_request() { + if(!thread_request) + throw Exception(0, 0, "request is not initialized"); return *thread_request; } @@ -232,15 +218,24 @@ static void gc_substitute_memory_managem @test hint on one should call this for each thread xmlSubstituteEntitiesDefault(1); */ void pa_globals_init() { - // global variables + +#ifndef PA_DEBUG_DISABLE_GC + // Dont collect unless explicitly requested. This is quicker (~30% ), + // but less memory-efficient(~8%), so deciding for speed. + GC_disable(); + // as we log allocation errors, we don't need default gc warnings (without timestamp and URI) + GC_set_warn_proc(GC_ignore_warn_proc); +#endif + + // init socks + pa_socks_init(); + + // global variables cache_managers=new Cache_managers; // in various libraries gc_substitute_memory_management_functions(); - // hex value - setup_hex_value(); - #ifdef SYMBOLS_CACHING // symbols cache Symbols::init(); @@ -300,6 +295,8 @@ void pa_globals_done() { if(is_dlinited) lt_dlexit(); + + pa_socks_done(); } void pa_dlinit() { @@ -344,21 +341,13 @@ void pa_dlinit() { #define LIB_XML PREFIX "gnome/libxml2-x.x.x/" PLATFORM_64 PLATFORM_32 CONFIGURATION "/lib/" #define LIB_XSLT PREFIX "gnome/libxslt-x.x.x/" PLATFORM_64 PLATFORM_32 CONFIGURATION "/lib/" -#ifdef LIBXML_STATIC +#ifdef XML_STATIC #pragma comment(lib, LIB_XML "libxml2_a.lib") -#else -#pragma comment(lib, LIB_XML "libxml2.lib") -#endif - -#ifdef LIBXSLT_STATIC #pragma comment(lib, LIB_XSLT "libxslt_a.lib") -#else -#pragma comment(lib, LIB_XSLT "libxslt.lib") -#endif - -#ifdef LIBEXSLT_STATIC #pragma comment(lib, LIB_XSLT "libexslt_a.lib") #else +#pragma comment(lib, LIB_XML "libxml2.lib") +#pragma comment(lib, LIB_XSLT "libxslt.lib") #pragma comment(lib, LIB_XSLT "libexslt.lib") #endif @@ -367,7 +356,6 @@ void pa_dlinit() { // defines for VS2015 to link with gc/xml libs compiled in the previous VS versions #if _MSC_VER >= 1900 #pragma comment(lib,"legacy_stdio_definitions.lib") -extern "C" { FILE _iob[3] = { *stdin, *stdout, *stderr }; } #endif #endif // _MSC_VER