diff options
author | Sergei Turchanov <turchanov@farpost.com> | 2019-08-28 13:05:14 +1000 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-08-30 16:06:50 +0200 |
commit | 8f564e5308970e3c1b96fd17e493c5c3a952954b (patch) | |
tree | b6b08a309a6b2b4fa298d037be2cd3c8ffcb83b4 | |
parent | ed749edd477bfcc3923c086a6443aaa91192e5b7 (diff) | |
download | php-git-8f564e5308970e3c1b96fd17e493c5c3a952954b.tar.gz |
Fixed bug #78469
fcgi_accept_request function is supposed to call a FastCGI implementation's
on_accept hook when entering an "accepting" stage (that is right before
calling "accept"). This hook implementation (fpm_request_accepting) updates
a worker state to an "accepting" state which is effectively an "Idle" state,
and updates counters on the scoreboard of the corresponding pool (idle++,
active--).
But this is not done when listening for client connections on a named pipe on
Windows platform. In that case a combination of
ConnectNamedPipe/WaitForSingleObject is used (to be able to catch in_shutdown
as far as I understand), but it is nonetheless functionally equivalent to
"accept" call. Also by not calling on_hook neither a worker's state is updated
to "accepting" state nor scoreboard counters are updated.
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | main/fastcgi.c | 4 |
2 files changed, 6 insertions, 2 deletions
@@ -7,6 +7,10 @@ PHP NEWS . Fixed bug #78412 (Generator incorrectly reports non-releasable $this as GC child). (Nikita) +- FastCGI: + . Fixed bug #78469 (FastCGI on_accept hook is not called when using named + pipes on Windows). (Sergei Turchanov) + - MySQLnd: . Fixed connect_attr issues and added the _server_host connection attribute. (Qianqian Bu) diff --git a/main/fastcgi.c b/main/fastcgi.c index 3181661877..4b3dd312ff 100644 --- a/main/fastcgi.c +++ b/main/fastcgi.c @@ -1375,6 +1375,8 @@ int fcgi_accept_request(fcgi_request *req) if (in_shutdown) { return -1; } + + req->hook.on_accept(); #ifdef _WIN32 if (!req->tcp) { pipe = (HANDLE)_get_osfhandle(req->listen_socket); @@ -1405,8 +1407,6 @@ int fcgi_accept_request(fcgi_request *req) sa_t sa; socklen_t len = sizeof(sa); - req->hook.on_accept(); - FCGI_LOCK(req->listen_socket); req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len); FCGI_UNLOCK(req->listen_socket); |