diff --git a/globals.c b/globals.c index 157f7f0c..a786a4b9 100644 --- a/globals.c +++ b/globals.c @@ -754,12 +754,20 @@ xmlInitGlobalState(xmlGlobalStatePtr gs) { gs->gs_xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber; gs->gs_xmlDoValidityCheckingDefaultValue = xmlDoValidityCheckingDefaultValueThrDef; -#if defined(DEBUG_MEMORY_LOCATION) - gs->gs_xmlFree = (xmlFreeFunc) xmlMemFree; - gs->gs_xmlMalloc = (xmlMallocFunc) xmlMemMalloc; - gs->gs_xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc; - gs->gs_xmlRealloc = (xmlReallocFunc) xmlMemRealloc; - gs->gs_xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup; +#ifdef LIBXML_THREAD_ALLOC_ENABLED +#ifdef DEBUG_MEMORY_LOCATION + gs->gs_xmlFree = xmlMemFree; + gs->gs_xmlMalloc = xmlMemMalloc; + gs->gs_xmlMallocAtomic = xmlMemMalloc; + gs->gs_xmlRealloc = xmlMemRealloc; + gs->gs_xmlMemStrdup = xmlMemoryStrdup; +#else + gs->gs_xmlFree = free; + gs->gs_xmlMalloc = malloc; + gs->gs_xmlMallocAtomic = malloc; + gs->gs_xmlRealloc = realloc; + gs->gs_xmlMemStrdup = xmlPosixStrdup; +#endif #endif gs->gs_xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef; #ifdef LIBXML_OUTPUT_ENABLED diff --git a/include/libxml/xmlmemory.h b/include/libxml/xmlmemory.h index 1a43882c..a3e26ddc 100644 --- a/include/libxml/xmlmemory.h +++ b/include/libxml/xmlmemory.h @@ -80,7 +80,7 @@ typedef char *(*xmlStrdupFunc)(const char *str); #define XML_OP XML_DECLARE_GLOBAL XML_GLOBALS_ALLOC #undef XML_OP - #ifdef LIBXML_THREAD_ENABLED + #if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION) #define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc) #define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic) #define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc) diff --git a/runtest.c b/runtest.c index 37fb2a9e..209dc77d 100644 --- a/runtest.c +++ b/runtest.c @@ -4431,6 +4431,10 @@ thread_specific_data(void *private_data) const char *filename = params->filename; int okay = 1; +#ifdef LIBXML_THREAD_ALLOC_ENABLED + xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup); +#endif + myDoc = xmlReadFile(filename, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD); if (myDoc) { xmlFreeDoc(myDoc); diff --git a/threads.c b/threads.c index a43f6fd2..3e8ef2fe 100644 --- a/threads.c +++ b/threads.c @@ -579,6 +579,7 @@ xmlInitParser(void) { if (xmlParserInnerInitialized == 0) { #if defined(_WIN32) && \ + !defined(LIBXML_THREAD_ALLOC_ENABLED) && \ (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL)) if (xmlFree == free) atexit(xmlCleanupParser); @@ -665,7 +666,9 @@ xmlCleanupParser(void) { xmlParserInnerInitialized = 0; } -#if defined(HAVE_ATTRIBUTE_DESTRUCTOR) && !defined(LIBXML_STATIC) && \ +#if defined(HAVE_ATTRIBUTE_DESTRUCTOR) && \ + !defined(LIBXML_THREAD_ALLOC_ENABLED) && \ + !defined(LIBXML_STATIC) && \ !defined(_WIN32) static void ATTRIBUTE_DESTRUCTOR