aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2010-07-19 15:14:46 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2010-07-19 15:14:46 +0400
commitc0b7a87e6aaa8dd90604d470ea6558ff53691e85 (patch)
tree10e5cfcb7160e48c595b11daa999d976e86e56e6 /src/main.c
parentdec1abd6e4582b74b658db72a7071ce098d1c9e5 (diff)
downloadrspamd-c0b7a87e6aaa8dd90604d470ea6558ff53691e85.tar.gz
rspamd-c0b7a87e6aaa8dd90604d470ea6558ff53691e85.zip
* Reopen log file by USR1 signal
* Add reopenlog method to FreeBSD rc script
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c
index 3c292f2b4..cbbfea268 100644
--- a/src/main.c
+++ b/src/main.c
@@ -116,7 +116,6 @@ sig_handler (int signo, siginfo_t *info, void *unused)
switch (signo) {
case SIGHUP:
do_restart = 1;
- do_reopen_log = 1;
break;
case SIGINT:
case SIGTERM:
@@ -125,6 +124,9 @@ sig_handler (int signo, siginfo_t *info, void *unused)
case SIGCHLD:
child_dead = 1;
break;
+ case SIGUSR1:
+ do_reopen_log = 1;
+ break;
case SIGUSR2:
/* Do nothing */
break;
@@ -605,6 +607,16 @@ wait_for_workers (gpointer key, gpointer value, gpointer unused)
return TRUE;
}
+static void
+reopen_log_handler (gpointer key, gpointer value, gpointer unused)
+{
+ struct rspamd_worker *w = value;
+
+ if (kill (w->pid, SIGUSR1) == -1) {
+ msg_err ("kill failed for pid %P: %s", w->pid, strerror (errno));
+ }
+}
+
#if 0
/* XXX: remove this as it is unused now */
static gboolean
@@ -958,14 +970,17 @@ main (int argc, char **argv, char **env)
}
if (do_restart) {
do_restart = 0;
- do_reopen_log = 1;
-
+ reopen_log ();
msg_info ("rspamd " RVERSION " is restarting");
g_hash_table_foreach (rspamd->workers, kill_old_workers, NULL);
remove_all_maps ();
reread_config (rspamd);
spawn_workers (rspamd);
-
+ }
+ if (do_reopen_log) {
+ do_reopen_log = 0;
+ reopen_log ();
+ g_hash_table_foreach (rspamd->workers, reopen_log_handler, NULL);
}
if (got_alarm) {
got_alarm = 0;