From: Ondrej Zajicek (work) Date: Wed, 25 Nov 2020 14:15:13 +0000 (+0100) Subject: Log: Fix locking during log reconfiguration X-Git-Tag: v2.0.8~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=62d57b9bdf82cc978f889f0118c8aa19ae999a3d;p=thirdparty%2Fbird.git Log: Fix locking during log reconfiguration The log subsystem should be locked earlier, as default_log_list() may internally manipulate with the current_log_list (if it is also a default log list). --- diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c index 44536cc94..14d18c018 100644 --- a/sysdep/unix/log.c +++ b/sysdep/unix/log.c @@ -382,12 +382,12 @@ log_switch(int initial, list *logs, const char *new_syslog_name) { struct log_config *l; + /* We should not manipulate with log list when other threads may use it */ + log_lock(); + 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)