mirror of
https://github.com/cesanta/mongoose.git
synced 2024-12-28 23:49:44 +08:00
Under Linux, reap CGI zombies reliably
This commit is contained in:
parent
66ba1259f2
commit
51b1f3a021
13
main.c
13
main.c
@ -65,15 +65,7 @@ static struct mg_context *ctx; // Set by start_mongoose()
|
|||||||
#endif /* !CONFIG_FILE */
|
#endif /* !CONFIG_FILE */
|
||||||
|
|
||||||
static void WINCDECL signal_handler(int sig_num) {
|
static void WINCDECL signal_handler(int sig_num) {
|
||||||
#if !defined(_WIN32)
|
exit_flag = sig_num;
|
||||||
if (sig_num == SIGCHLD) {
|
|
||||||
do {
|
|
||||||
} while (waitpid(-1, &sig_num, WNOHANG) > 0);
|
|
||||||
} else
|
|
||||||
#endif /* !_WIN32 */
|
|
||||||
{
|
|
||||||
exit_flag = sig_num;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void die(const char *fmt, ...) {
|
static void die(const char *fmt, ...) {
|
||||||
@ -260,9 +252,6 @@ static void start_mongoose(int argc, char *argv[]) {
|
|||||||
process_command_line_arguments(argv, options);
|
process_command_line_arguments(argv, options);
|
||||||
|
|
||||||
/* Setup signal handler: quit on Ctrl-C */
|
/* Setup signal handler: quit on Ctrl-C */
|
||||||
#ifndef _WIN32
|
|
||||||
signal(SIGCHLD, signal_handler);
|
|
||||||
#endif /* _WIN32 */
|
|
||||||
signal(SIGTERM, signal_handler);
|
signal(SIGTERM, signal_handler);
|
||||||
signal(SIGINT, signal_handler);
|
signal(SIGINT, signal_handler);
|
||||||
|
|
||||||
|
@ -2832,7 +2832,7 @@ static void prepare_cgi_environment(struct mg_connection *conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void handle_cgi_request(struct mg_connection *conn, const char *prog) {
|
static void handle_cgi_request(struct mg_connection *conn, const char *prog) {
|
||||||
int headers_len, data_len, i, fd_stdin[2], fd_stdout[2];
|
int headers_len, data_len, i, exit_status, fd_stdin[2], fd_stdout[2];
|
||||||
const char *status;
|
const char *status;
|
||||||
char buf[BUFSIZ], *pbuf, dir[PATH_MAX], *p;
|
char buf[BUFSIZ], *pbuf, dir[PATH_MAX], *p;
|
||||||
struct mg_request_info ri;
|
struct mg_request_info ri;
|
||||||
@ -2925,6 +2925,9 @@ static void handle_cgi_request(struct mg_connection *conn, const char *prog) {
|
|||||||
done:
|
done:
|
||||||
if (pid != (pid_t) -1) {
|
if (pid != (pid_t) -1) {
|
||||||
kill(pid, SIGKILL);
|
kill(pid, SIGKILL);
|
||||||
|
#if !defined(_WIN32)
|
||||||
|
do {} while (waitpid(-1, &exit_status, WNOHANG) > 0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (fd_stdin[0] != -1) {
|
if (fd_stdin[0] != -1) {
|
||||||
(void) close(fd_stdin[0]);
|
(void) close(fd_stdin[0]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user