1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) Index Data
3 * See the file LICENSE for details.
8 * \brief Initialize global things
23 #include <gnutls/gnutls.h>
31 #include <libxml/parser.h>
35 #include <libxslt/xslt.h>
39 #include <libexslt/exslt.h>
42 static int yaz_init_flag = 0;
44 static pthread_mutex_t yaz_init_mutex = PTHREAD_MUTEX_INITIALIZER;
47 extern void yaz_log_init_globals(void);
48 extern void yaz_log_deinit_globals(void);
51 GCRY_THREAD_OPTION_PTHREAD_IMPL;
54 void yaz_init_globals(void)
59 pthread_mutex_lock(&yaz_init_mutex);
63 yaz_log_init_globals();
65 /* POSIX threads locking. In case gnutls_global_init do not override */
66 gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
72 /* most likely, GnuTLS has already initialized libgcrypt */
73 if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0)
75 gcry_control(GCRYCTL_INITIALIZATION_FINISHED, NULL, 0);
87 yaz_init_flag = 1; /* must be last, before unlocking */
90 pthread_mutex_unlock(&yaz_init_mutex);
94 void yaz_deinit_globals(void)
99 pthread_mutex_lock(&yaz_init_mutex);
103 yaz_log_deinit_globals();
105 gnutls_global_deinit();
108 xsltCleanupGlobals();
115 #if YAZ_POSIX_THREADS
116 pthread_mutex_unlock(&yaz_init_mutex);
123 * c-file-style: "Stroustrup"
124 * indent-tabs-mode: nil
126 * vim: shiftwidth=4 tabstop=8 expandtab