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);
 }