Fix: gcrypt not properly initialized YAZ-740
authorAdam Dickmeiss <adam@indexdata.dk>
Fri, 21 Feb 2014 21:07:55 +0000 (22:07 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Fri, 21 Feb 2014 21:07:55 +0000 (22:07 +0100)
include/yaz/yconfig.h
src/Makefile.am
src/log.c
src/tcpip.c
win/makefile

index bb28377..67c203d 100644 (file)
@@ -57,6 +57,8 @@
 #define YAZ_END_CDECL
 #endif
 
+YAZ_EXPORT void yaz_init_globals(void);
+
 #endif
 /*
  * Local variables:
index 6037383..3987081 100644 (file)
@@ -89,6 +89,7 @@ libyaz_la_SOURCES= $(GEN_FILES) \
   zget.c yaz-ccl.c diag-entry.c diag-entry.h \
   logrpn.c \
   otherinfo.c pquery.c sortspec.c charneg.c initopt.c init_diag.c \
+  init_globals.c \
   zoom-c.c zoom-memcached.c zoom-z3950.c zoom-sru.c zoom-query.c \
   zoom-record-cache.c zoom-event.c \
   record_render.c zoom-socket.c zoom-opt.c zoom-p.h sru_facet.c sru-p.h \
index 38ecac7..eccb1ed 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -115,15 +115,10 @@ static void yaz_log_unlock(void)
     yaz_mutex_leave(log_mutex);
 }
 
-static void internal_log_init(void)
+void yaz_log_init_globals(void)
 {
-    static int mutex_init_flag = 0; /* not yet initialized */
     char *env;
 
-    if (mutex_init_flag)
-        return;
-    mutex_init_flag = 1; /* here, 'cause nmem_mutex_create may call yaz_log */
-
     if (log_mutex == 0)
         yaz_mutex_create(&log_mutex);
 #if YAZ_POSIX_THREADS
@@ -134,7 +129,6 @@ static void internal_log_init(void)
         l_level = yaz_log_mask_str_x(env, l_level);
 }
 
-
 FILE *yaz_log_file(void)
 {
     FILE *f = 0;
@@ -158,7 +152,7 @@ void yaz_log_close(void)
 
 void yaz_log_init_file(const char *fname)
 {
-    internal_log_init();
+    yaz_init_globals();
 
     yaz_log_close();
     if (fname)
@@ -218,7 +212,7 @@ static void rotate_log(const char *cur_fname)
 
 void yaz_log_init_level(int level)
 {
-    internal_log_init();
+    yaz_init_globals();
     if ( (l_level & YLOG_FLUSH) != (level & YLOG_FLUSH) )
     {
         l_level = level;
@@ -271,7 +265,7 @@ void yaz_log_init_prefix2(const char *prefix)
 
 void yaz_log_init(int level, const char *prefix, const char *fname)
 {
-    internal_log_init();
+    yaz_init_globals();
     yaz_log_init_level(level);
     yaz_log_init_prefix(prefix);
     if (fname && *fname)
@@ -400,8 +394,6 @@ static void yaz_log_to_file(int level, const char *log_message)
     struct tm *tm;
 #endif
 
-    internal_log_init();
-
     yaz_log_lock();
 #if HAVE_LOCALTIME_R
     localtime_r(&ti, tm);
@@ -470,7 +462,7 @@ void yaz_log(int level, const char *fmt, ...)
     FILE *file;
     int o_level = level;
 
-    internal_log_init();
+    yaz_init_globals();
     if (!(level & l_level))
         return;
     va_start(ap, fmt);
@@ -564,7 +556,7 @@ int yaz_log_module_level(const char *name)
     int i;
     char clean[255];
     char *n = clean_name(name, strlen(name), clean, sizeof(clean));
-    internal_log_init();
+    yaz_init_globals();
 
     for (i = 0; mask_names[i].name; i++)
         if (0==strcmp(n, mask_names[i].name))
@@ -581,7 +573,7 @@ int yaz_log_module_level(const char *name)
 
 int yaz_log_mask_str(const char *str)
 {
-    internal_log_init(); /* since l_level may be affected */
+    yaz_init_globals(); /* since l_level may be affected */
     return yaz_log_mask_str_x(str, l_level);
 }
 
@@ -589,7 +581,7 @@ int yaz_log_mask_str_x(const char *str, int level)
 {
     const char *p;
 
-    internal_log_init();
+    yaz_init_globals();
     while (*str)
     {
         int negated = 0;
index 64942ae..0d8eaeb 100644 (file)
@@ -138,6 +138,7 @@ typedef struct tcpip_state
 static int tcpip_init(void)
 {
     static int initialized = 0;
+    yaz_init_globals();
     if (!initialized)
     {
         WORD requested;
@@ -153,6 +154,7 @@ static int tcpip_init(void)
 #else
 static int tcpip_init(void)
 {
+    yaz_init_globals();
     return 1;
 }
 #endif
@@ -572,7 +574,6 @@ int tcpip_rcvconnect(COMSTACK h)
 #if HAVE_GNUTLS_H
     if (h->type == ssl_type && !sp->session)
     {
-        gnutls_global_init();
         tcpip_create_cred(h);
         gnutls_init(&sp->session, GNUTLS_CLIENT);
         gnutls_set_default_priority(sp->session);
index 35d0515..8aeab91 100644 (file)
@@ -509,6 +509,7 @@ MISC_OBJS= \
    $(OBJDIR)\zoom-socket.obj \
    $(OBJDIR)\initopt.obj \
    $(OBJDIR)\init_diag.obj \
+   $(OBJDIR)\init_globals.obj \
    $(OBJDIR)\xmlquery.obj \
    $(OBJDIR)\xmlerror.obj \
    $(OBJDIR)\mime.obj \