--- parser3/src/main/pa_globals.C 2004/02/11 09:18:24 1.167 +++ parser3/src/main/pa_globals.C 2004/02/13 14:01:08 1.172 @@ -1,11 +1,11 @@ /** @file Parser: globals. - Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_GLOBALS_C="$Date: 2004/02/11 09:18:24 $"; +static const char * const IDENT_GLOBALS_C="$Date: 2004/02/13 14:01:08 $"; #include "pa_config_includes.h" @@ -100,28 +100,26 @@ public: } }; -Hash xml_generic_error_infos; +static Hash xml_generic_error_infos; static void xmlParserGenericErrorFunc(void * /*ctx*/, const char* msg, ...) { //_asm int 3; pa_thread_t thread_id=pa_get_thread_id(); - // infinitely looking for free slot to fill it - while(true) { + XML_Generic_error_info* p; + { SYNCHRONIZED; // find+fill blocked // first try to get existing for this thread_id - XML_Generic_error_info *p=xml_generic_error_infos.get(thread_id); + p=xml_generic_error_infos.get(thread_id); if(!p) // occupy empty one xml_generic_error_infos.put(thread_id, (p=new(PointerFreeGC) XML_Generic_error_info)); - - va_list args; - va_start(args, msg); - p->used+=vsnprintf(p->buf+p->used, sizeof(p->buf)-p->used, msg, args); - va_end(args); - - break; } + + va_list args; + va_start(args, msg); + p->used+=vsnprintf(p->buf+p->used, sizeof(p->buf)-p->used, msg, args); + va_end(args); } bool xmlHaveGenericErrors() { @@ -165,11 +163,14 @@ static char *pa_GC_strdup(const char *s) return 0; size_t size=strlen(s)+1; - char *result=(char *)GC_malloc_atomic(size); + char *result=(char *)GC_MALLOC_ATOMIC(size); if(!result) SAPI::abort("out of memory (while duplicating XML string [size=%d])", size); memcpy(result, s, size); +#ifdef PA_DEBUG_XML_GC_MEMORY + fprintf(stderr, "pa_GC_strdup(%p=%s, length=%d)=0x%p\n", s, s, size, result); +#endif return result; } @@ -364,51 +365,51 @@ void pa_globals_init() { # ifdef _DEBUG # ifdef LIBXML_STATIC -# pragma comment(lib, GNOME_LIBS "/libxml2-x.x.x/win32/binaries-debug/libxml2_a.lib") +# pragma comment(lib, GNOME_LIBS "/libxml2-x.x.x/win32/debug/lib/libxml2_a.lib") # else -# pragma comment(lib, GNOME_LIBS "/libxml2-x.x.x/win32/binaries-debug/libxml2.lib") +# pragma comment(lib, GNOME_LIBS "/libxml2-x.x.x/win32/debug/lib/libxml2.lib") # endif # ifdef LIBXSLT_STATIC -# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/binaries-debug/libxslt_a.lib") +# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/debug/lib/libxslt_a.lib") # else -# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/binaries-debug/libxslt.lib") +# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/debug/lib/libxslt.lib") # endif # ifdef LIBEXSLT_STATIC -# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/binaries-debug/libexslt_a.lib") +# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/debug/lib/libexslt_a.lib") # else -# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/binaries-debug/libexslt.lib") +# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/debug/lib/libexslt.lib") # endif # ifdef LIBGDOME_STATIC -# pragma comment(lib, GNOME_LIBS "/gdome2-x.x.x/win32/dsp/libgdome_DebugStatic/libgdome.lib") +# pragma comment(lib, GNOME_LIBS "/gdome2-x.x.x/win32/DebugStatic/libgdome.lib") # else -# pragma comment(lib, GNOME_LIBS "/gdome2-x.x.x/win32/dsp/libgdome_DebugDynamic/libgdome.lib") +# pragma comment(lib, GNOME_LIBS "/gdome2-x.x.x/win32/DebugDynamic/libgdome.lib") # endif #else # ifdef LIBXML_STATIC -# pragma comment(lib, GNOME_LIBS "/libxml2-x.x.x/win32/binaries-release/libxml2_a.lib") +# pragma comment(lib, GNOME_LIBS "/libxml2-x.x.x/win32/release/lib/libxml2_a.lib") # else -# pragma comment(lib, GNOME_LIBS "/libxml2-x.x.x/win32/binaries-release/libxml2.lib") +# pragma comment(lib, GNOME_LIBS "/libxml2-x.x.x/win32/release/lib/libxml2.lib") # endif # ifdef LIBXSLT_STATIC -# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/binaries-release/libxslt_a.lib") +# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/release/lib/libxslt_a.lib") # else -# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/binaries-release/libxslt.lib") +# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/release/lib/libxslt.lib") # endif # ifdef LIBEXSLT_STATIC -# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/binaries-release/libexslt_a.lib") +# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/release/lib/libexslt_a.lib") # else -# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/binaries-release/libexslt.lib") +# pragma comment(lib, GNOME_LIBS "/libxslt-x.x.x/win32/release/lib/libexslt.lib") # endif # ifdef LIBGDOME_STATIC -# pragma comment(lib, GNOME_LIBS "/gdome2-x.x.x/win32/dsp/libgdome_ReleaseStatic/libgdome.lib") +# pragma comment(lib, GNOME_LIBS "/gdome2-x.x.x/win32/ReleaseStatic/libgdome.lib") # else -# pragma comment(lib, GNOME_LIBS "/gdome2-x.x.x/win32/dsp/libgdome_ReleaseDynamic/libgdome.lib") +# pragma comment(lib, GNOME_LIBS "/gdome2-x.x.x/win32/ReleaseDynamic/libgdome.lib") # endif # endif