ID:               36158
 Updated by:       [EMAIL PROTECTED]
 Reported By:      chris at mysociety dot org
-Status:           Open
+Status:           Assigned
 Bug Type:         CGI related
-Operating System: n/a
+Operating System: *
-PHP Version:      4.4.2
+PHP Version:      5.1.2, 4.4.2
-Assigned To:      
+Assigned To:      dmitry
 New Comment:

Dmitry, does the new code fix this problem..?


Previous Comments:
------------------------------------------------------------------------

[2006-01-26 01:55:15] chris at mysociety dot org

That snapshot (a) doesn't fix the problem -- the FastCGI code is
essentially unchanged since 4.x, though with a bunch of whitespace
noise; and (b) wouldn't help us in any case since it's PHP5 and our
applications are written for PHP4.

------------------------------------------------------------------------

[2006-01-25 23:51:05] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5.1-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.1-win32-latest.zip



------------------------------------------------------------------------

[2006-01-25 21:00:06] chris at mysociety dot org

Description:
------------
When php is running as a FastCGI server, it should handle SIGTERM and
execute a graceful shutdown, because the mod_fastcgi process manager
uses this signal to shut down excess dynamic servers. "Graceful" in
this context means that the server must finish handling any outstanding
request and then terminate its connection to the web server. Presently,
PHP does not handle SIGTERM at all in the FastCGI request loop, so that
on receipt of SIGTERM, php aborts, even if half-way through a request.
This typically results in the web server logging "Incomplete headers (0
bytes) received", and returning "500 Internal Server Error" to the
client.

I have prepared a patch for this issue, here:
http://bitter.ukcod.org.uk/~chris/tmp/20060125/php-4.3.10-fastcgi-sigterm-fix.patch
-- this is against 4.3.10, but it applies to 4.4.2 fine.

Reproduce code:
---------------
Put the following in a .php file:
<? sleep(1); print "fish"; ?>
and set it up to run under FastCGI. Set up a script to request the page
in a loop ("while : ; do wget -O/dev/null -q http://path/to/script ;
done") Then kill the PHP process (pkill php will do this under Linux).
If you catch the script in the sleep, this will result in the client
getting a 500 and the web server logging a message about php failing,
as describe above.

Expected result:
----------------
No errors.

Actual result:
--------------
500 error.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=36158&edit=1

Reply via email to