From 2cd4852321434d0098b336ed102a3ee3a3bc8c15 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Tue, 25 Dec 2012 11:00:29 +0000 Subject: [PATCH] Restore SIGCHLD handler to SIG_DFL in CGI process --- mongoose.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mongoose.c b/mongoose.c index f68e4563..d994e88d 100644 --- a/mongoose.c +++ b/mongoose.c @@ -1395,6 +1395,12 @@ static pid_t spawn_process(struct mg_connection *conn, const char *prog, (void) close(fd_stdin); (void) close(fd_stdout); + // After exec, all signal handlers are restored to their default values, + // with one exception of SIGCHLD. According to POSIX.1-2001 and Linux's + // implementation, SIGCHLD's handler will leave unchanged after exec + // if it was set to be ignored. Restore it to default action. + signal(SIGCHLD, SIG_DFL); + interp = conn->ctx->config[CGI_INTERPRETER]; if (interp == NULL) { (void) execle(prog, prog, NULL, envp);