浏览代码

Restore SIGCHLD handler to SIG_DFL in CGI process

Sergey Lyubka 12 年之前
父节点
当前提交
2cd4852321
共有 1 个文件被更改,包括 6 次插入0 次删除
  1. 6 0
      mongoose.c

+ 6 - 0
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);