Index: third_party/libxml/globals.c |
diff --git a/third_party/libxml/globals.c b/third_party/libxml/globals.c |
index cbc66253d14c05d61d4ba8dbbe1af11383cae00b..69002f007d0e6f2673a0454438262497fa9f5fb2 100644 |
--- a/third_party/libxml/globals.c |
+++ b/third_party/libxml/globals.c |
@@ -46,7 +46,8 @@ static xmlMutexPtr xmlThrDefMutex = NULL; |
*/ |
void xmlInitGlobals(void) |
{ |
- xmlThrDefMutex = xmlNewMutex(); |
+ if (xmlThrDefMutex == NULL) |
+ xmlThrDefMutex = xmlNewMutex(); |
} |
/** |
@@ -148,6 +149,7 @@ xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlStrdup; |
#undef xmlGenericError |
#undef xmlStructuredError |
#undef xmlGenericErrorContext |
+#undef xmlStructuredErrorContext |
#undef xmlGetWarningsDefaultValue |
#undef xmlIndentTreeOutput |
#undef xmlTreeIndentString |
@@ -314,6 +316,13 @@ static xmlStructuredErrorFunc xmlStructuredErrorThrDef = NULL; |
*/ |
void *xmlGenericErrorContext = NULL; |
static void *xmlGenericErrorContextThrDef = NULL; |
+/** |
+ * xmlStructuredErrorContext: |
+ * |
+ * Global setting passed to structured error callbacks |
+ */ |
+void *xmlStructuredErrorContext = NULL; |
+static void *xmlStructuredErrorContextThrDef = NULL; |
xmlError xmlLastError; |
/* |
@@ -545,6 +554,7 @@ xmlInitializeGlobalState(xmlGlobalStatePtr gs) |
gs->xmlGenericError = xmlGenericErrorThrDef; |
gs->xmlStructuredError = xmlStructuredErrorThrDef; |
gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef; |
+ gs->xmlStructuredErrorContext = xmlStructuredErrorContextThrDef; |
gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef; |
gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef; |
@@ -573,7 +583,7 @@ xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) { |
void |
xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) { |
xmlMutexLock(xmlThrDefMutex); |
- xmlGenericErrorContextThrDef = ctx; |
+ xmlStructuredErrorContextThrDef = ctx; |
xmlStructuredErrorThrDef = handler; |
xmlMutexUnlock(xmlThrDefMutex); |
} |
@@ -876,6 +886,15 @@ __xmlGenericErrorContext(void) { |
return (&xmlGetGlobalState()->xmlGenericErrorContext); |
} |
+#undef xmlStructuredErrorContext |
+void * * |
+__xmlStructuredErrorContext(void) { |
+ if (IS_MAIN_THREAD) |
+ return (&xmlStructuredErrorContext); |
+ else |
+ return (&xmlGetGlobalState()->xmlStructuredErrorContext); |
+} |
+ |
#undef xmlGetWarningsDefaultValue |
int * |
__xmlGetWarningsDefaultValue(void) { |
@@ -910,7 +929,7 @@ int xmlThrDefIndentTreeOutput(int v) { |
return ret; |
} |
-#undef xmlTreeIndentString |
+#undef xmlTreeIndentString |
const char * * |
__xmlTreeIndentString(void) { |
if (IS_MAIN_THREAD) |