Commit a6388605 authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Reopen log file on SIGUSR2.

parent c75e7063
...@@ -91,6 +91,7 @@ static volatile sig_atomic_t exiting = 0, dumping = 0, changed = 0; ...@@ -91,6 +91,7 @@ static volatile sig_atomic_t exiting = 0, dumping = 0, changed = 0;
static int kernel_routes_callback(int changed, void *closure); static int kernel_routes_callback(int changed, void *closure);
static void init_signals(void); static void init_signals(void);
static void dump_tables(FILE *out); static void dump_tables(FILE *out);
static int reopen_logfile();
int int
main(int argc, char **argv) main(int argc, char **argv)
...@@ -264,28 +265,12 @@ main(int argc, char **argv) ...@@ -264,28 +265,12 @@ main(int argc, char **argv)
if(logfile == NULL) if(logfile == NULL)
logfile = "/var/log/babel.log"; logfile = "/var/log/babel.log";
} }
if(logfile) {
int lfd = open(logfile, O_CREAT | O_WRONLY | O_APPEND, 0644);
if(lfd < 0) {
perror("open(logfile)");
goto fail;
}
fflush(stdout);
fflush(stderr);
rc = dup2(lfd, 1); rc = reopen_logfile();
if(rc < 0) {
perror("dup2(logfile, 1)");
goto fail;
}
rc = dup2(lfd, 2);
if(rc < 0) { if(rc < 0) {
perror("dup2(logfile, 2)"); perror("reopen_logfile()");
goto fail; goto fail;
} }
close(lfd);
}
fd = open("/dev/null", O_RDONLY); fd = open("/dev/null", O_RDONLY);
if(fd < 0) { if(fd < 0) {
...@@ -610,6 +595,11 @@ main(int argc, char **argv) ...@@ -610,6 +595,11 @@ main(int argc, char **argv)
kernel_dump_time = now.tv_sec; kernel_dump_time = now.tv_sec;
check_neighbours_time = now; check_neighbours_time = now;
expiry_time = now.tv_sec; expiry_time = now.tv_sec;
rc = reopen_logfile();
if(rc < 0) {
perror("reopen_logfile");
break;
}
changed = 0; changed = 0;
} }
...@@ -916,6 +906,35 @@ dump_tables(FILE *out) ...@@ -916,6 +906,35 @@ dump_tables(FILE *out)
fflush(out); fflush(out);
} }
static int
reopen_logfile()
{
int lfd, rc;
if(logfile == NULL)
return 0;
lfd = open(logfile, O_CREAT | O_WRONLY | O_APPEND, 0644);
if(lfd < 0)
return -1;
fflush(stdout);
fflush(stderr);
rc = dup2(lfd, 1);
if(rc < 0)
return -1;
rc = dup2(lfd, 2);
if(rc < 0)
return -1;
if(lfd > 2)
close(lfd);
return 1;
}
static int static int
kernel_routes_callback(int changed, void *closure) kernel_routes_callback(int changed, void *closure)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment