No more reachable memory with yaz_deinit_globals
[yaz-moved-to-github.git] / src / log.c
index 8bc5ad0..4edead7 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -103,8 +103,12 @@ static struct {
 
 static unsigned int next_log_bit = YLOG_LAST_BIT<<1; /* first dynamic bit */
 
+static int yaz_log_reopen_flag = 0;
+
 static YAZ_MUTEX log_mutex = 0;
 
+static void yaz_log_open(void);
+
 void yaz_log_lock(void)
 {
     yaz_mutex_enter(log_mutex);
@@ -150,6 +154,15 @@ void yaz_log_close(void)
     }
 }
 
+void yaz_log_deinit_globals(void)
+{
+    if (log_mutex)
+    {
+        yaz_mutex_destroy(&log_mutex);
+        yaz_log_close();
+    }
+}
+
 void yaz_log_init_file(const char *fname)
 {
     yaz_init_globals();
@@ -169,7 +182,7 @@ void yaz_log_init_file(const char *fname)
         yaz_log_info.type = use_none;  /* NULL name; use no file at all */
         yaz_log_info.l_fname[0] = '\0';
     }
-    yaz_log_reopen();
+    yaz_log_open();
 }
 
 static void rotate_log(const char *cur_fname)
@@ -216,7 +229,7 @@ void yaz_log_init_level(int level)
     if ( (l_level & YLOG_FLUSH) != (level & YLOG_FLUSH) )
     {
         l_level = level;
-        yaz_log_reopen(); /* make sure we set buffering right */
+        yaz_log_open(); /* make sure we set buffering right */
     }
     else
         l_level = level;
@@ -306,6 +319,11 @@ static void yaz_log_open_check(struct tm *tm, int force, const char *filemode)
     if (yaz_log_info.type != use_file)
         return;
 
+    if (yaz_log_reopen_flag)
+    {
+        force = 1;
+        yaz_log_reopen_flag = 0;
+    }
     if (*yaz_log_info.l_fname)
     {
         strftime(new_filename, sizeof(new_filename)-1, yaz_log_info.l_fname,
@@ -368,9 +386,13 @@ static void yaz_log_do_reopen(const char *filemode)
     yaz_log_unlock();
 }
 
-
 void yaz_log_reopen()
 {
+    yaz_log_reopen_flag = 1;
+}
+
+static void yaz_log_open()
+{
     yaz_log_do_reopen("a");
 }