From ebcb0cd09361a4b814ad8b7e629938c474af0be2 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 21 Feb 2014 22:07:55 +0100 Subject: [PATCH] Fix: gcrypt not properly initialized YAZ-740 --- include/yaz/yconfig.h | 2 ++ src/Makefile.am | 1 + src/log.c | 24 ++++++++---------------- src/tcpip.c | 3 ++- win/makefile | 1 + 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/include/yaz/yconfig.h b/include/yaz/yconfig.h index bb28377..67c203d 100644 --- a/include/yaz/yconfig.h +++ b/include/yaz/yconfig.h @@ -57,6 +57,8 @@ #define YAZ_END_CDECL #endif +YAZ_EXPORT void yaz_init_globals(void); + #endif /* * Local variables: diff --git a/src/Makefile.am b/src/Makefile.am index 6037383..3987081 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 \ diff --git a/src/log.c b/src/log.c index 38ecac7..eccb1ed 100644 --- 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; diff --git a/src/tcpip.c b/src/tcpip.c index 64942ae..0d8eaeb 100644 --- a/src/tcpip.c +++ b/src/tcpip.c @@ -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); diff --git a/win/makefile b/win/makefile index 35d0515..8aeab91 100644 --- a/win/makefile +++ b/win/makefile @@ -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 \ -- 1.7.10.4