Skip to content

Commit 253f260

Browse files
committed
threads: Fix --with-thread-alloc
Fixes #606.
1 parent 4f132bc commit 253f260

4 files changed

Lines changed: 23 additions & 8 deletions

File tree

‎globals.c‎

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -754,12 +754,20 @@ xmlInitGlobalState(xmlGlobalStatePtr gs) {
754754
gs->gs_xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber;
755755
gs->gs_xmlDoValidityCheckingDefaultValue =
756756
xmlDoValidityCheckingDefaultValueThrDef;
757-
#if defined(DEBUG_MEMORY_LOCATION)
758-
gs->gs_xmlFree = (xmlFreeFunc) xmlMemFree;
759-
gs->gs_xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
760-
gs->gs_xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
761-
gs->gs_xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
762-
gs->gs_xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
757+
#ifdef LIBXML_THREAD_ALLOC_ENABLED
758+
#ifdef DEBUG_MEMORY_LOCATION
759+
gs->gs_xmlFree = xmlMemFree;
760+
gs->gs_xmlMalloc = xmlMemMalloc;
761+
gs->gs_xmlMallocAtomic = xmlMemMalloc;
762+
gs->gs_xmlRealloc = xmlMemRealloc;
763+
gs->gs_xmlMemStrdup = xmlMemoryStrdup;
764+
#else
765+
gs->gs_xmlFree = free;
766+
gs->gs_xmlMalloc = malloc;
767+
gs->gs_xmlMallocAtomic = malloc;
768+
gs->gs_xmlRealloc = realloc;
769+
gs->gs_xmlMemStrdup = xmlPosixStrdup;
770+
#endif
763771
#endif
764772
gs->gs_xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef;
765773
#ifdef LIBXML_OUTPUT_ENABLED

‎include/libxml/xmlmemory.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ typedef char *(*xmlStrdupFunc)(const char *str);
8080
#define XML_OP XML_DECLARE_GLOBAL
8181
XML_GLOBALS_ALLOC
8282
#undef XML_OP
83-
#ifdef LIBXML_THREAD_ENABLED
83+
#if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
8484
#define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc)
8585
#define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic)
8686
#define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc)

‎runtest.c‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4431,6 +4431,10 @@ thread_specific_data(void *private_data)
44314431
const char *filename = params->filename;
44324432
int okay = 1;
44334433

4434+
#ifdef LIBXML_THREAD_ALLOC_ENABLED
4435+
xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
4436+
#endif
4437+
44344438
myDoc = xmlReadFile(filename, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD);
44354439
if (myDoc) {
44364440
xmlFreeDoc(myDoc);

‎threads.c‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,7 @@ xmlInitParser(void) {
579579

580580
if (xmlParserInnerInitialized == 0) {
581581
#if defined(_WIN32) && \
582+
!defined(LIBXML_THREAD_ALLOC_ENABLED) && \
582583
(!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
583584
if (xmlFree == free)
584585
atexit(xmlCleanupParser);
@@ -665,7 +666,9 @@ xmlCleanupParser(void) {
665666
xmlParserInnerInitialized = 0;
666667
}
667668

668-
#if defined(HAVE_ATTRIBUTE_DESTRUCTOR) && !defined(LIBXML_STATIC) && \
669+
#if defined(HAVE_ATTRIBUTE_DESTRUCTOR) && \
670+
!defined(LIBXML_THREAD_ALLOC_ENABLED) && \
671+
!defined(LIBXML_STATIC) && \
669672
!defined(_WIN32)
670673
static void
671674
ATTRIBUTE_DESTRUCTOR

0 commit comments

Comments
 (0)