Log: Fixed race condition in reconfigure while BFD is running
This commit is contained in:
parent
3b62417c35
commit
48addc88be
1 changed files with 9 additions and 1 deletions
|
@ -372,6 +372,9 @@ log_switch(int initial, list *logs, char *new_syslog_name)
|
||||||
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)
|
||||||
|
@ -388,7 +391,7 @@ log_switch(int initial, list *logs, char *new_syslog_name)
|
||||||
|
|
||||||
#ifdef HAVE_SYSLOG_H
|
#ifdef HAVE_SYSLOG_H
|
||||||
if (!bstrcmp(current_syslog_name, new_syslog_name))
|
if (!bstrcmp(current_syslog_name, new_syslog_name))
|
||||||
return;
|
goto done;
|
||||||
|
|
||||||
if (current_syslog_name)
|
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);
|
current_syslog_name = xstrdup(new_syslog_name);
|
||||||
openlog(current_syslog_name, LOG_CONS | LOG_NDELAY, LOG_DAEMON);
|
openlog(current_syslog_name, LOG_CONS | LOG_NDELAY, LOG_DAEMON);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
done:
|
||||||
|
/* Logs exchange done, let the threads log as before */
|
||||||
|
log_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in a new issue