diff --git a/HTMLparser.c b/HTMLparser.c index 801712bc..a1396f79 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -2376,7 +2376,7 @@ htmlNewDocNoDtD(const xmlChar *URI, const xmlChar *ExternalID) { return(NULL); } } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)cur); return(cur); } diff --git a/SAX2.c b/SAX2.c index 48c0abc5..bffc65e7 100644 --- a/SAX2.c +++ b/SAX2.c @@ -1836,7 +1836,7 @@ skip: } else ret->content = (xmlChar *) intern; - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(ret); return(ret); } @@ -1952,7 +1952,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, xmlSAX2ErrMemory(ctxt); } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)ret); if ((ctxt->replaceEntities == 0) && (!ctxt->html)) { @@ -2200,7 +2200,7 @@ xmlSAX2StartElementNs(void *ctx, return; } } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(ret); } else { if (ctxt->dictNames) diff --git a/globals.c b/globals.c index 863b54d5..2ba1aab0 100644 --- a/globals.c +++ b/globals.c @@ -1133,7 +1133,7 @@ xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func) xmlMutexLock(&xmlThrDefMutex); old = xmlRegisterNodeDefaultValueThrDef; - __xmlRegisterCallbacks = 1; + xmlRegisterCallbacks = 1; xmlRegisterNodeDefaultValueThrDef = func; xmlMutexUnlock(&xmlThrDefMutex); @@ -1148,7 +1148,7 @@ xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func) xmlMutexLock(&xmlThrDefMutex); old = xmlDeregisterNodeDefaultValueThrDef; - __xmlRegisterCallbacks = 1; + xmlRegisterCallbacks = 1; xmlDeregisterNodeDefaultValueThrDef = func; xmlMutexUnlock(&xmlThrDefMutex); diff --git a/include/private/tree.h b/include/private/tree.h index 2d651d53..131e80c6 100644 --- a/include/private/tree.h +++ b/include/private/tree.h @@ -1,13 +1,8 @@ #ifndef XML_TREE_H_PRIVATE__ #define XML_TREE_H_PRIVATE__ -/* - * Internal variable indicating if a callback has been registered for - * node creation/destruction. It avoids spending a lot of time in locking - * function while checking if the callback exists. - */ XML_HIDDEN extern int -__xmlRegisterCallbacks; +xmlRegisterCallbacks; XML_HIDDEN int xmlSearchNsSafe(xmlNodePtr node, const xmlChar *href, xmlNsPtr *out); diff --git a/tree.c b/tree.c index ee8a8882..1267e34e 100644 --- a/tree.c +++ b/tree.c @@ -47,7 +47,12 @@ #include "private/error.h" #include "private/tree.h" -int __xmlRegisterCallbacks = 0; +/* + * Internal variable indicating whether a callback has been registered + * for node creation/destruction. This avoids looking up thread-local + * data if no callback was ever registered. + */ +int xmlRegisterCallbacks = 0; /************************************************************************ * * @@ -878,7 +883,7 @@ xmlNewDtd(xmlDocPtr doc, const xmlChar *name, doc->extSubset = cur; cur->doc = doc; - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)cur); return(cur); @@ -1001,7 +1006,7 @@ xmlCreateIntSubset(xmlDocPtr doc, const xmlChar *name, } } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)cur); return(cur); @@ -1037,7 +1042,7 @@ xmlFreeDtd(xmlDtdPtr cur) { } if (cur->doc != NULL) dict = cur->doc->dict; - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue((xmlNodePtr)cur); if (cur->children != NULL) { @@ -1118,7 +1123,7 @@ xmlNewDoc(const xmlChar *version) { */ cur->charset = XML_CHAR_ENCODING_UTF8; - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)cur); return(cur); } @@ -1140,7 +1145,7 @@ xmlFreeDoc(xmlDocPtr cur) { dict = cur->dict; - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue((xmlNodePtr)cur); /* @@ -1733,7 +1738,7 @@ xmlNewPropInternal(xmlNodePtr node, xmlNsPtr ns, } } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr) cur); return (cur); @@ -1868,7 +1873,7 @@ xmlNewDocProp(xmlDocPtr doc, const xmlChar *name, const xmlChar *value) { goto error; } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)cur); return(cur); @@ -1907,7 +1912,7 @@ xmlFreeProp(xmlAttrPtr cur) { if (cur->doc != NULL) dict = cur->doc->dict; - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue((xmlNodePtr)cur); /* Check for ID removal -> leading to invalid references ! */ @@ -2003,7 +2008,7 @@ xmlNewDocPI(xmlDocPtr doc, const xmlChar *name, const xmlChar *content) { goto error; } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)cur); return(cur); @@ -2090,7 +2095,7 @@ xmlNewElem(xmlDocPtr doc, xmlNsPtr ns, const xmlChar *name, } } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)cur); return(cur); @@ -2252,7 +2257,7 @@ xmlNewDocFragment(xmlDocPtr doc) { cur->doc = doc; - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(cur); return(cur); } @@ -2288,7 +2293,7 @@ xmlNewText(const xmlChar *content) { goto error; } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(cur); return(cur); @@ -2389,7 +2394,7 @@ xmlNewEntityRef(xmlDocPtr doc, xmlChar *name) { cur->doc = doc; cur->name = name; - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(cur); return(cur); @@ -2490,7 +2495,7 @@ xmlNewReference(const xmlDoc *doc, const xmlChar *name) { cur->last = (xmlNodePtr) ent; } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(cur); return(cur); @@ -2550,7 +2555,7 @@ xmlNewTextLen(const xmlChar *content, int len) { } } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(cur); return(cur); } @@ -2606,7 +2611,7 @@ xmlNewComment(const xmlChar *content) { goto error; } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(cur); return(cur); @@ -2648,7 +2653,7 @@ xmlNewCDataBlock(xmlDocPtr doc, const xmlChar *content, int len) { } } - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(cur); return(cur); } @@ -3636,7 +3641,7 @@ xmlFreeNodeList(xmlNodePtr cur) { cur->prev = NULL; cur->next = NULL; } else { - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue(cur); if (((cur->type == XML_ELEMENT_NODE) || @@ -3715,7 +3720,7 @@ xmlFreeNode(xmlNodePtr cur) { return; } - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue(cur); if (cur->doc != NULL) dict = cur->doc->dict; @@ -4323,7 +4328,7 @@ xmlStaticCopyNode(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent, } out: - if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue((xmlNodePtr)ret); return(ret); @@ -9898,7 +9903,7 @@ xmlRegisterNodeDefault(xmlRegisterNodeFunc func) { xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue; - __xmlRegisterCallbacks = 1; + xmlRegisterCallbacks = 1; xmlRegisterNodeDefaultValue = func; return(old); } @@ -9918,7 +9923,7 @@ xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func) { xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue; - __xmlRegisterCallbacks = 1; + xmlRegisterCallbacks = 1; xmlDeregisterNodeDefaultValue = func; return(old); } diff --git a/xmlreader.c b/xmlreader.c index 6609be0a..e132710a 100644 --- a/xmlreader.c +++ b/xmlreader.c @@ -259,7 +259,7 @@ xmlTextReaderFreeProp(xmlTextReaderPtr reader, xmlAttrPtr cur) { dict = NULL; if (cur == NULL) return; - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue((xmlNodePtr) cur); if (cur->children != NULL) @@ -350,7 +350,7 @@ xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur) { /* unroll to speed up freeing the document */ if (cur->type != XML_DTD_NODE) { - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue(cur); if (((cur->type == XML_ELEMENT_NODE) || @@ -437,7 +437,7 @@ xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur) { cur->children = NULL; } - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue(cur); if (((cur->type == XML_ELEMENT_NODE) || @@ -490,7 +490,7 @@ xmlTextReaderFreeDoc(xmlTextReaderPtr reader, xmlDocPtr cur) { if (cur == NULL) return; - if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) + if ((xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) xmlDeregisterNodeDefaultValue((xmlNodePtr) cur); /*