summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2020-11-25 15:04:34 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2020-11-25 15:04:34 +0100
commit0ef082c51e5d905e9137e1484036b9d9b32e9a75 (patch)
tree71bcdb7ea5fdf65fbebbe0acc79b4eccb1087e3a
parent30b846826905b4da76f59a212a31928bd55e9783 (diff)
Log: Reinitialize the static logging structures
The static logging structures are reused, we need to reinitialize them otherwise add_tail() would fail in debug build. Reinitializing these structures should be fine as the list they belong to is being reinitialized on entry to the very same function. Thanks to Andreas Rammhold and Mikael Magnusson for patches.
-rw-r--r--sysdep/unix/log.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c
index e24322c6..44536cc9 100644
--- a/sysdep/unix/log.c
+++ b/sysdep/unix/log.c
@@ -341,7 +341,11 @@ default_log_list(int initial, const char **syslog_name)
#ifdef HAVE_SYSLOG_H
if (!dbgf)
{
- static struct log_config lc_syslog = { .mask = ~0 };
+ static struct log_config lc_syslog;
+ lc_syslog = (struct log_config){
+ .mask = ~0
+ };
+
add_tail(&log_list, &lc_syslog.n);
*syslog_name = bird_name;
}
@@ -349,15 +353,24 @@ default_log_list(int initial, const char **syslog_name)
if (dbgf && (dbgf != stderr))
{
- static struct log_config lc_debug = { .mask = ~0 };
- lc_debug.fh = dbgf;
+ static struct log_config lc_debug;
+ lc_debug = (struct log_config){
+ .mask = ~0,
+ .fh = dbgf
+ };
+
add_tail(&log_list, &lc_debug.n);
}
if (initial || (dbgf == stderr))
{
- static struct log_config lc_stderr = { .mask = ~0, .terminal_flag = 1};
- lc_stderr.fh = stderr;
+ static struct log_config lc_stderr;
+ lc_stderr = (struct log_config){
+ .mask = ~0,
+ .terminal_flag = 1,
+ .fh = stderr
+ };
+
add_tail(&log_list, &lc_stderr.n);
}