X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Finit_globals.c;h=4d3804dd5a86090f37caa73318e27267c196e5ce;hp=81cb966c3d3971380119db639b9c41343d39290f;hb=dae688b0b3ebe96d6b65385b2fa0e627ab6ce451;hpb=eb4631c82f3b57fb016234447443268d4f46b933 diff --git a/src/init_globals.c b/src/init_globals.c index 81cb966..4d3804d 100644 --- a/src/init_globals.c +++ b/src/init_globals.c @@ -12,9 +12,12 @@ #include #endif +#include + #if YAZ_POSIX_THREADS #include #endif +#include #if HAVE_GNUTLS_H #include @@ -24,6 +27,14 @@ #include #endif +#if YAZ_HAVE_XML2 +#include +#endif + +#if YAZ_HAVE_XSLT +#include +#endif + #if YAZ_HAVE_EXSLT #include #endif @@ -34,6 +45,11 @@ 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); + +#if HAVE_GCRYPT_H +GCRY_THREAD_OPTION_PTHREAD_IMPL; +#endif void yaz_init_globals(void) { @@ -45,6 +61,10 @@ void yaz_init_globals(void) if (!yaz_init_flag) { yaz_log_init_globals(); +#if HAVE_GCRYPT_H + /* POSIX threads locking. In case gnutls_global_init do not override */ + gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); +#endif #if HAVE_GNUTLS_H gnutls_global_init(); #endif @@ -55,6 +75,12 @@ void yaz_init_globals(void) 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 @@ -65,6 +91,32 @@ void yaz_init_globals(void) #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 +} + /* * Local variables: * c-basic-offset: 4