Skip to content

Commit

Permalink
Fixed bug #78469
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
turchanov authored and nikic committed Aug 30, 2019
1 parent ed749ed commit 8f564e5
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
4 changes: 4 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions main/fastcgi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 8f564e5

Please sign in to comment.