New function yaz_deinit_globals
YAZ_BEGIN_CDECL
YAZ_EXPORT void yaz_init_globals(void);
YAZ_BEGIN_CDECL
YAZ_EXPORT void yaz_init_globals(void);
+YAZ_EXPORT void yaz_deinit_globals(void);
+
#include <config.h>
#endif
#include <config.h>
#endif
+#include <yaz/yconfig.h>
+
#if YAZ_POSIX_THREADS
#include <pthread.h>
#endif
#if YAZ_POSIX_THREADS
#include <pthread.h>
#endif
#include <gcrypt.h>
#endif
#include <gcrypt.h>
#endif
+#if YAZ_HAVE_XML2
+#include <libxml/parser.h>
+#endif
+
+#if YAZ_HAVE_XSLT
+#include <libxslt/xslt.h>
+#endif
+
#if YAZ_HAVE_EXSLT
#include <libexslt/exslt.h>
#endif
#if YAZ_HAVE_EXSLT
#include <libexslt/exslt.h>
#endif
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, NULL, 0);
}
#endif
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, NULL, 0);
}
#endif
+#if YAZ_HAVE_XML2
+ xmlInitParser();
+#endif
+#if YAZ_HAVE_XSLT
+ xsltInit();
+#endif
#if YAZ_HAVE_EXSLT
exsltRegisterAll();
#endif
#if YAZ_HAVE_EXSLT
exsltRegisterAll();
#endif
+void yaz_deinit_globals(void)
+{
+ if (!yaz_init_flag)
+ return;
+#if YAZ_POSIX_THREADS
+ pthread_mutex_lock(&yaz_init_mutex);
+#endif
+ if (yaz_init_flag)
+ {
+#if HAVE_GNUTLS_H
+ gnutls_global_deinit();
+#endif
+#if YAZ_HAVE_XSLT
+ xsltCleanupGlobals();
+#endif
+#if YAZ_HAVE_XML2
+ xmlCleanupParser();
+#endif
+ yaz_init_flag = 0;
+ }
+#if YAZ_POSIX_THREADS
+ pthread_mutex_unlock(&yaz_init_mutex);
+#endif
+}
+
/*
* Local variables:
* c-basic-offset: 4
/*
* Local variables:
* c-basic-offset: 4
}
if (test_fout)
fclose(test_fout);
}
if (test_fout)
fclose(test_fout);
if (test_failed)
exit(1);
exit(0);
if (test_failed)
exit(1);
exit(0);
check_norm();
u_cleanup();
check_norm();
u_cleanup();
-#if YAZ_HAVE_XML2
- xmlCleanupParser();
-#endif
-
#else /* YAZ_HAVE_ICU */
yaz_log(YLOG_LOG, "ICU unit tests omitted");
#else /* YAZ_HAVE_ICU */
yaz_log(YLOG_LOG, "ICU unit tests omitted");
tst_convert2();
tst_convert3();
tst_convert4();
tst_convert2();
tst_convert3();
tst_convert4();
- xsltCleanupGlobals();
-#endif
-#if YAZ_HAVE_XML2
- xmlCleanupParser();