X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Finit_globals.c;h=5442c4be311bf0eefb2888c373929aba157297c9;hb=94a0aa1a3d45b41484ac4bf81b85f90dca7f7181;hp=0800a4bc836744c91c8c6e5af3c647e266e9ad37;hpb=71e066dd201f095184b98199399ac7965f7f176e;p=yaz-moved-to-github.git diff --git a/src/init_globals.c b/src/init_globals.c index 0800a4b..5442c4b 100644 --- a/src/init_globals.c +++ b/src/init_globals.c @@ -12,16 +12,23 @@ #include #endif +#include + #if YAZ_POSIX_THREADS #include #endif +#include #if HAVE_GNUTLS_H #include #endif -#if HAVE_GCRYPT_H -#include +#if YAZ_HAVE_XML2 +#include +#endif + +#if YAZ_HAVE_XSLT +#include #endif #if YAZ_HAVE_EXSLT @@ -34,6 +41,7 @@ static pthread_mutex_t yaz_init_mutex = PTHREAD_MUTEX_INITIALIZER; #endif extern void yaz_log_init_globals(void); +extern void yaz_log_deinit_globals(void); void yaz_init_globals(void) { @@ -48,18 +56,43 @@ void yaz_init_globals(void) #if HAVE_GNUTLS_H gnutls_global_init(); #endif -#if HAVE_GCRYPT_H - /* most likely, GnuTLS has already initialized libgcrypt */ - if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0) - { - gcry_control(GCRYCTL_INITIALIZATION_FINISHED, NULL, 0); - } +#if YAZ_HAVE_XML2 + xmlInitParser(); +#endif +#if YAZ_HAVE_XSLT + xsltInit(); #endif - yaz_init_flag = 1; - } #if YAZ_HAVE_EXSLT - exsltRegisterAll(); + exsltRegisterAll(); +#endif + yaz_init_flag = 1; /* must be last, before unlocking */ + } +#if YAZ_POSIX_THREADS + pthread_mutex_unlock(&yaz_init_mutex); +#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) + { + yaz_log_deinit_globals(); +#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