X-Git-Url: https://git.tld-linux.org/?a=blobdiff_plain;f=php-fcgi-graceful.patch;fp=php-fcgi-graceful.patch;h=26f86f34a2b3e3ca8cb7c9ecfe5bc567ce1969df;hb=47130bb86ff82df6ba9ec83597ffeacabc1d888a;hp=0000000000000000000000000000000000000000;hpb=72ad6add086b462795ce6d3a9a6ca5f8d8410b03;p=packages%2Fphp.git diff --git a/php-fcgi-graceful.patch b/php-fcgi-graceful.patch new file mode 100644 index 0000000..26f86f3 --- /dev/null +++ b/php-fcgi-graceful.patch @@ -0,0 +1,77 @@ +Related links: + +http://bugs.php.net/bug.php?id=43224 this patch + +http://bugs.php.net/bug.php?id=41593 +http://bugs.php.net/bug.php?id=36158 +http://php-fpm.anight.org/ + +test script too: +\n"; +$i = 0; +while ($i < 35) { + echo (++$i), "
\n"; + flush(); + sleep(1); +} +echo "end!
\n"; +?> + +--- php-5.4.0alpha2/sapi/cgi/cgi_main.c~ 2011-08-05 13:26:14.000000000 +0300 ++++ php-5.4.0alpha2/sapi/cgi/cgi_main.c 2011-08-05 13:57:17.564708456 +0300 +@@ -101,6 +101,9 @@ + */ + static int parent = 1; + ++/* Socket we are listening on incoming connections */ ++static int fcgi_fd = 0; ++ + /** + * Process group + */ +@@ -1221,6 +1224,21 @@ + exit(0); + } + ++/** ++ * Graceful shutdown. Close listening sockets. ++ */ ++void fastcgi_graceful_shutdown(int signal) ++{ ++#ifdef DEBUG_FASTCGI ++ fprintf(stderr, "FastCGI graceful shutdown, pid %d\n", getpid()); ++#endif ++ ++ /* Close the listening socket so new processes can reuse the same port */ ++ closesocket(fcgi_fd); ++ fcgi_fd = 0; ++} ++ ++ + PHP_INI_BEGIN() + STD_PHP_INI_ENTRY("cgi.rfc2616_headers", "0", PHP_INI_ALL, OnUpdateBool, rfc2616_headers, php_cgi_globals_struct, php_cgi_globals) + STD_PHP_INI_ENTRY("cgi.nph", "0", PHP_INI_ALL, OnUpdateBool, nph, php_cgi_globals_struct, php_cgi_globals) +@@ -1764,7 +1764,6 @@ + int requests = 0; + int fastcgi; + char *bindpath = NULL; +- int fcgi_fd = 0; + fcgi_request *request = NULL; + int repeats = 1; + int benchmark = 0; +@@ -1579,9 +1596,13 @@ + parent = 0; + + /* don't catch our signals */ +- sigaction(SIGTERM, &old_term, 0); + sigaction(SIGQUIT, &old_quit, 0); + sigaction(SIGINT, &old_int, 0); ++ ++ /* call graceful shutdown handler for SIGTERM */ ++ act.sa_flags = 0; ++ act.sa_handler = fastcgi_graceful_shutdown; ++ sigaction(SIGTERM, &act, &old_term); + break; + case -1: + perror("php (pre-forking)");