summaryrefslogtreecommitdiff
path: root/sapi/cgi/fastcgi.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2006-02-03 16:30:09 +0000
committerDmitry Stogov <dmitry@php.net>2006-02-03 16:30:09 +0000
commitaa1142eded6e52740146fa6b41bbb60c8aeb571c (patch)
tree3b44a13116b11b9f37c1a12bbb5aba0db9e0237d /sapi/cgi/fastcgi.c
parent52232a7f7aaeb72e25f0134ac9142cfb3f6795d9 (diff)
downloadphp-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.c10
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;