Commit 48addc88 authored by Maria Matejka's avatar Maria Matejka
Browse files

Log: Fixed race condition in reconfigure while BFD is running

parent 3b62417c
Loading
Loading
Loading
Loading
+9 −1
Original line number Original line Diff line number Diff line
@@ -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