Bug #67583 [NEW]: double fastcgi_end_request on max_children limit
| From: | saprykin dot dmitry at gmail dot com | Date: | Mon, 07 Jul 2014 10:38:00 +0000 |
| Subject: | Bug #67583 [NEW]: double fastcgi_end_request on max_children limit | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-186498@lists.php.net to get a copy of this message | ||
From: saprykin dot dmitry at gmail dot com
Operating system:
PHP version: Irrelevant
Package: FPM related
Bug Type: Bug
Bug description:double fastcgi_end_request on max_children limit
Description:
------------
Php sends 2 fastcgi FCGI_END_REQUEST records instead of one when
fastcgi_finish_request(); called and fpm param max_requests exceeded.
* one is sent on fastcgi_finish_request(); call
* other is sent in block
fpm_main.c:1951
requests++;
if (max_requests && (requests == max_requests)) {
fcgi_finish_request(&request, 1);
break;
}
I have created pull request for this bug
https://github.com/php/php-src/pull/709
It confuses fastcgi client (i.e. nginx) receiving 2 FCGI_END_REQUEST
records one after another.
Test script:
---------------
<?php
ignore_user_abort();
fastcgi_finish_request();
sleep(10);
?>
Nginx configuration
upstream fpm
{
server 127.0.0.1:9000;
keepalive 1;
}
server
{
......
fastcgi_keep_conn on;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_pass fpm;
......
}
PHP FPM configuration
max_children = 1
max_requests = 2
Expected result:
----------------
No errors in nginx error log
Actual result:
--------------
Every second request is finished with 502 status
Nginx error.log contains records:
2014/07/07 13:42:58 [error] 11253#0: *1 upstream sent unexpected FastCGI
record: 3 while reading response header from upstream, client:
127.0.0.1, server: localhost, request: "GET /nginx_test.phtml HTTP/1.1",
upstream: "fastcgi://127.0.0.1:8002", host: "localhost:8081"
--
Edit bug report at https://bugs.php.net/bug.php?id=67583&edit=1
--