Hi, On Fri, 2012-04-20 at 16:34 +0200, Gergely Nagy wrote:
Reloading syslog-ng's config is often done via a killall -HUP syslog-ng command, which also sends a signal to the supervisor. However, the supervisor did not handle said signal, thus it exited as is the default for it.
To work around this issue, lets ignore SIGHUP inside the supervisor.
Reported-by: Patrick Hemmer Signed-off-by: Gergely Nagy <algernon@balabit.hu> --- lib/gprocess.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/lib/gprocess.c b/lib/gprocess.c index aaefbab..9246d88 100644 --- a/lib/gprocess.c +++ b/lib/gprocess.c @@ -1110,7 +1110,9 @@ g_process_perform_supervise(void) g_process_message("Initialization failed but the daemon did not exit, even when forced to, trying to recover; pid='%d'", pid); continue; } - + + sigignore(SIGHUP); +
sigignore() is deprecated, I'd prefer to use the sigaction() family of functions, e.g.: memset(&sa, 0, sizeof(sa)); sa.sa_handler = SIG_IGN; sigaction(SIGHUP, &sa, NULL); Also, wouldn't it make sense to move this signal setup code upwards, to the first thing g_process_perform_supervise() does? Is there a particular reason it is within the supervisor main loop? -- Bazsi