From ab119c3eb30adc14a0a4b4196774f17c2443053c Mon Sep 17 00:00:00 2001 From: Denis Yeldandi Date: Thu, 9 Feb 2017 10:22:37 +0300 Subject: [PATCH 1/2] Patch for bug #69860 --- main/fastcgi.c | 1 + 1 file changed, 1 insertion(+) diff --git a/main/fastcgi.c b/main/fastcgi.c index 0da9c3873e0e6..d2d48414ba25a 100644 --- a/main/fastcgi.c +++ b/main/fastcgi.c @@ -1472,6 +1472,7 @@ int fcgi_accept_request(fcgi_request *req) return -1; } if (fcgi_read_request(req)) { + req->hook.on_read(); #ifdef _WIN32 if (is_impersonate && !req->tcp) { pipe = (HANDLE)_get_osfhandle(req->fd); From 736c6fdd81205bb3ebfc852eb5efa663bd2fd3da Mon Sep 17 00:00:00 2001 From: Denis Yeldandi Date: Thu, 9 Feb 2017 14:49:12 +0300 Subject: [PATCH 2/2] Patch for bug #69860, correct socket shutdown --- main/fastcgi.c | 5 +++++ main/fastcgi.h | 1 + sapi/fpm/fpm/fpm_main.c | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/main/fastcgi.c b/main/fastcgi.c index d2d48414ba25a..c9a506ae3a3ef 100644 --- a/main/fastcgi.c +++ b/main/fastcgi.c @@ -462,6 +462,11 @@ void fcgi_terminate(void) in_shutdown = 1; } +void fcgi_request_set_keep(fcgi_request *req, int new_value) +{ + req->keep = new_value; +} + #ifndef HAVE_ATTRIBUTE_WEAK void fcgi_set_logger(fcgi_logger lg) { fcgi_log = lg; diff --git a/main/fastcgi.h b/main/fastcgi.h index efadac61d2078..4cafc69c6ea28 100644 --- a/main/fastcgi.h +++ b/main/fastcgi.h @@ -102,6 +102,7 @@ int fcgi_accept_request(fcgi_request *req); int fcgi_finish_request(fcgi_request *req, int force_close); const char *fcgi_get_last_client_ip(); void fcgi_set_in_shutdown(int new_value); +void fcgi_request_set_keep(fcgi_request *req, int new_value); #ifndef HAVE_ATTRIBUTE_WEAK typedef void (*fcgi_logger)(int type, const char *fmt, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 3b33141aeec43..ce9b85620b4e5 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -1995,7 +1995,8 @@ consult the installation file that came with this distribution, or visit \n\ requests++; if (UNEXPECTED(max_requests && (requests == max_requests))) { - fcgi_finish_request(request, 1); + fcgi_request_set_keep(request, 0); + fcgi_finish_request(request, 0); break; } /* end of fastcgi loop */