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).
This commit is contained in:
Ondrej Zajicek (work) 2020-11-25 15:15:13 +01:00
parent 0ef082c51e
commit 62d57b9bdf

View file

@ -382,12 +382,12 @@ log_switch(int initial, list *logs, const char *new_syslog_name)
{ {
struct log_config *l; struct log_config *l;
/* We should not manipulate with log list when other threads may use it */
log_lock();
if (!logs || EMPTY_LIST(*logs)) if (!logs || EMPTY_LIST(*logs))
logs = default_log_list(initial, &new_syslog_name); 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 */ /* Close the logs to avoid pinning them on disk when deleted */
if (current_log_list) if (current_log_list)
WALK_LIST(l, *current_log_list) WALK_LIST(l, *current_log_list)