fixed thread problem
diff --git a/ChangeLog b/ChangeLog
index 6a0b1bf..41613d0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Fri Nov 22 13:13:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * threads.c: fixed initialization problem in xmlNewGlobalState
+ which was causing crash.
+ * globals.c: removed duplicate call to initxmlDefaultSAXHandler
+ in xmlInitializeGlobalState.
+ * parserInternals.c: cleaned up ctxt->sax initialisation.
+
Thu Nov 21 15:05:45 CET 2002 Daniel Veillard <daniel@veillard.com>
* tree.c include/libxml/tree.h: modified the existing APIs
diff --git a/globals.c b/globals.c
index 2f721c1..72865c3 100644
--- a/globals.c
+++ b/globals.c
@@ -409,7 +409,7 @@
/*
* Perform initialization as required by libxml
*/
- initxmlDefaultSAXHandler(&gs->xmlDefaultSAXHandler, 1);
+
#ifdef LIBXML_DOCB_ENABLED
initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler);
#endif
diff --git a/parserInternals.c b/parserInternals.c
index b526e0a..c9ea6ed 100644
--- a/parserInternals.c
+++ b/parserInternals.c
@@ -2146,8 +2146,6 @@
void
xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
{
- xmlSAXHandler *sax;
-
if(ctxt==NULL) {
xmlGenericError(xmlGenericErrorContext,
"xmlInitParserCtxt: NULL context given\n");
@@ -2156,13 +2154,13 @@
xmlDefaultSAXHandlerInit();
- sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
- if (sax == NULL) {
+ ctxt->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
+ if (ctxt->sax == NULL) {
xmlGenericError(xmlGenericErrorContext,
"xmlInitParserCtxt: out of memory\n");
}
else
- memset(sax, 0, sizeof(xmlSAXHandler));
+ memcpy(ctxt->sax, &xmlDefaultSAXHandler, sizeof(xmlSAXHandler));
/* Allocate the Input stack */
ctxt->inputTab = (xmlParserInputPtr *)
@@ -2250,10 +2248,6 @@
ctxt->spaceMax = 10;
ctxt->spaceTab[0] = -1;
ctxt->space = &ctxt->spaceTab[0];
-
- ctxt->sax = sax;
- memcpy(sax, &xmlDefaultSAXHandler, sizeof(xmlSAXHandler));
-
ctxt->userData = ctxt;
ctxt->myDoc = NULL;
ctxt->wellFormed = 1;
@@ -2264,7 +2258,7 @@
ctxt->linenumbers = xmlLineNumbersDefaultValue;
ctxt->keepBlanks = xmlKeepBlanksDefaultValue;
if (ctxt->keepBlanks == 0)
- sax->ignorableWhitespace = ignorableWhitespace;
+ ctxt->sax->ignorableWhitespace = ignorableWhitespace;
ctxt->vctxt.userData = ctxt;
ctxt->vctxt.error = xmlParserValidityError;
diff --git a/threads.c b/threads.c
index 505133e..bd99efd 100644
--- a/threads.c
+++ b/threads.c
@@ -315,7 +315,7 @@
if (gs == NULL)
return(NULL);
- memset(gs, 0, sizeof(gs));
+ memset(gs, 0, sizeof(xmlGlobalState));
xmlInitializeGlobalState(gs);
return (gs);
}