diff options
author | Dmitry Stogov <dmitry@php.net> | 2006-02-03 16:30:09 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2006-02-03 16:30:09 +0000 |
commit | aa1142eded6e52740146fa6b41bbb60c8aeb571c (patch) | |
tree | 3b44a13116b11b9f37c1a12bbb5aba0db9e0237d /sapi/cgi/fastcgi.c | |
parent | 52232a7f7aaeb72e25f0134ac9142cfb3f6795d9 (diff) | |
download | php-git-aa1142eded6e52740146fa6b41bbb60c8aeb571c.tar.gz |
Fixed bug #36158 (SIGTERM is not handled correctly when running as a FastCGI server)
Diffstat (limited to 'sapi/cgi/fastcgi.c')
-rw-r--r-- | sapi/cgi/fastcgi.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sapi/cgi/fastcgi.c b/sapi/cgi/fastcgi.c index f2ba15982e..d616592391 100644 --- a/sapi/cgi/fastcgi.c +++ b/sapi/cgi/fastcgi.c @@ -157,7 +157,7 @@ static DWORD WINAPI fcgi_shutdown_thread(LPVOID arg) static void fcgi_signal_handler(int signo) { - if (signo == SIGUSR1) { + if (signo == SIGUSR1 || signo == SIGTERM) { in_shutdown = 1; } } @@ -217,6 +217,7 @@ int fcgi_init(void) new_sa.sa_flags = 0; new_sa.sa_handler = fcgi_signal_handler; sigaction(SIGUSR1, &new_sa, NULL); + sigaction(SIGTERM, &new_sa, NULL); sigaction(SIGPIPE, NULL, &old_sa); if (old_sa.sa_handler == SIG_DFL) { sigaction(SIGPIPE, &new_sa, NULL); @@ -627,6 +628,9 @@ int fcgi_accept_request(fcgi_request *req) while (1) { if (req->fd < 0) { while (1) { + if (in_shutdown) { + return -1; + } #ifdef _WIN32 HANDLE pipe = (HANDLE)_get_osfhandle(req->listen_socket); OVERLAPPED ov; @@ -663,7 +667,7 @@ int fcgi_accept_request(fcgi_request *req) FCGI_UNLOCK(req->listen_socket); #endif - if (in_shutdown || (req->fd < 0 && errno != EINTR)) { + if (req->fd < 0 && (in_shutdown || errno != EINTR)) { return -1; } @@ -686,6 +690,8 @@ try_again: } #endif } + } else if (in_shutdown) { + return -1; } if (fcgi_read_request(req)) { return req->fd; |