]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Log: Fixed race condition in reconfigure while BFD is running
authorMaria Matejka <mq@ucw.cz>
Tue, 30 Jul 2019 10:11:49 +0000 (12:11 +0200)
committerMaria Matejka <mq@ucw.cz>
Tue, 30 Jul 2019 10:12:44 +0000 (12:12 +0200)
sysdep/unix/log.c

index 960b4c1c7c538486bc44e55f4878567f762086f2..b030bac2fb3c7cf7bfe681f0fd661c74c7fbba6f 100644 (file)
@@ -352,6 +352,9 @@ log_switch(int debug, list *logs, char *new_syslog_name)
   if (!logs || EMPTY_LIST(*logs))
     logs = default_log_list(debug, !logs, &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)
@@ -369,7 +372,7 @@ log_switch(int debug, list *logs, char *new_syslog_name)
 #ifdef HAVE_SYSLOG_H
   if (current_syslog_name && new_syslog_name &&
       !strcmp(current_syslog_name, new_syslog_name))
-    return;
+    goto done;
 
   if (current_syslog_name)
   {
@@ -383,7 +386,12 @@ log_switch(int debug, 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();
 }