applied patch from Christopher R. Palmer to avoid a race condition in
authorDaniel Veillard <veillard@src.gnome.org>
Tue, 21 Feb 2006 17:02:03 +0000 (17:02 +0000)
committerDaniel Veillard <veillard@src.gnome.org>
Tue, 21 Feb 2006 17:02:03 +0000 (17:02 +0000)
* libxslt/extensions.c libxslt/xslt.c libxslt/xslt.h
  libxslt/xsltInternals.h: applied patch from Christopher R. Palmer
  to avoid a race condition in xsltInit()
Daniel

ChangeLog
libxslt/extensions.c
libxslt/xslt.c
libxslt/xslt.h
libxslt/xsltInternals.h

index ae0bd26..0f1c016 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Feb 21 17:59:11 CET 2006 Daniel Veillard <daniel@veillard.com>
+
+       * libxslt/extensions.c libxslt/xslt.c libxslt/xslt.h
+         libxslt/xsltInternals.h: applied patch from Christopher R. Palmer
+         to avoid a race condition in xsltInit()
+
 Sun Feb 19 22:40:58 CET 2006 Daniel Veillard <daniel@veillard.com>
 
        * doc/xsltproc.1 doc/xsltproc.xml: improvement of the man page
index 324dff3..450474a 100644 (file)
@@ -1881,6 +1881,8 @@ xsltCleanupGlobals(void)
         xmlHashFree(xsltModuleHash, NULL);
         xsltModuleHash = NULL;
     }
+
+    xsltUninit();
 }
 
 static void
index 6f59d4c..07e4081 100644 (file)
@@ -148,9 +148,26 @@ exclPrefixPop(xsltStylesheetPtr style)
  * Initializes the processor (e.g. registers built-in extensions,
  * etc.)
  */
-static void
+
+static int initialized = 0;
+
+void
 xsltInit (void) {
-    xsltRegisterAllExtras();
+    if (initialized == 0) {
+       initialized = 1;
+        xsltRegisterAllExtras();
+    }
+}
+
+/**
+ * xsltUninit
+ *
+ * Uninitializes the processor.
+ */
+
+void
+xsltUninit (void) {
+    initialized = 0;
 }
 
 /**
index 0404581..849b03c 100644 (file)
@@ -83,6 +83,13 @@ XSLTPUBVAR const int xsltLibxsltVersion;
 XSLTPUBVAR const int xsltLibxmlVersion;
 
 /*
+ * Global initialization function.
+ */
+
+XSLTPUBFUN void XSLTCALL
+               xsltInit                (void);
+
+/*
  * Global cleanup function.
  */
 XSLTPUBFUN void XSLTCALL       
index 193316f..2c6b54e 100644 (file)
@@ -694,6 +694,14 @@ XSLTPUBFUN xmlChar * XSLTCALL
                                                 xmlNodePtr node);
 XSLTPUBFUN void XSLTCALL
                        xsltFreeAVTList         (void *avt);
+
+/*
+ * Extra function for successful xsltCleanupGlobals / xsltInit sequence.
+ */
+
+XSLTPUBFUN void XSLTCALL
+                       xsltUninit              (void);
+
 #ifdef __cplusplus
 }
 #endif