summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sysdep/unix/log.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c
index 45f442e7..18894f98 100644
--- a/sysdep/unix/log.c
+++ b/sysdep/unix/log.c
@@ -372,6 +372,9 @@ log_switch(int initial, list *logs, char *new_syslog_name)
if (!logs || EMPTY_LIST(*logs))
logs = default_log_list(initial, &new_syslog_name);
+ /* We shouldn't close the logs when other threads may use them */
+ log_lock();
+
/* Close the logs to avoid pinning them on disk when deleted */
if (current_log_list)
WALK_LIST(l, *current_log_list)
@@ -388,7 +391,7 @@ log_switch(int initial, list *logs, char *new_syslog_name)
#ifdef HAVE_SYSLOG_H
if (!bstrcmp(current_syslog_name, new_syslog_name))
- return;
+ goto done;
if (current_syslog_name)
{
@@ -402,7 +405,12 @@ log_switch(int initial, list *logs, char *new_syslog_name)
current_syslog_name = xstrdup(new_syslog_name);
openlog(current_syslog_name, LOG_CONS | LOG_NDELAY, LOG_DAEMON);
}
+
#endif
+
+done:
+ /* Logs exchange done, let the threads log as before */
+ log_unlock();
}
void