SOURCES: php-fcgi-graceful.patch (NEW) - attempt to implement grac...
glen
glen at pld-linux.org
Wed Nov 7 17:37:49 CET 2007
Author: glen Date: Wed Nov 7 16:37:49 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- attempt to implement graceful shutdown with SIGINT signal
---- Files affected:
SOURCES:
php-fcgi-graceful.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/php-fcgi-graceful.patch
diff -u /dev/null SOURCES/php-fcgi-graceful.patch:1.1
--- /dev/null Wed Nov 7 17:37:49 2007
+++ SOURCES/php-fcgi-graceful.patch Wed Nov 7 17:37:43 2007
@@ -0,0 +1,82 @@
+--- php5.3-200711071330/sapi/cgi/cgi_main.c 2007-11-01 13:32:38.000000000 +0200
++++ php5.3-200711071330-graceful/sapi/cgi/cgi_main.c 2007-11-07 17:40:37.884171760 +0200
+@@ -101,6 +101,9 @@
+ */
+ static int parent = 1;
+
++/* Socket we are listening on incoming connections */
++static int fcgi_fd = -1;
++
+ /**
+ * Process group
+ */
+@@ -116,6 +119,7 @@
+ static char *php_optarg = NULL;
+ static int php_optind = 1;
+ static zend_module_entry cgi_module_entry;
++static int accept_socket = -1;
+
+ static const opt_struct OPTIONS[] = {
+ {'a', 0, "interactive"},
+@@ -1211,16 +1215,38 @@
+ #endif
+
+ #ifndef PHP_WIN32
+- sigaction(SIGTERM, &old_term, 0);
+-
+ /* Kill all the processes in our process group */
+- kill(-pgroup, SIGTERM);
++ if (signal == SIGINT) {
++ sigaction(SIGTERM, &old_int, 0);
++ kill(-pgroup, SIGINT);
++ } else {
++ sigaction(SIGTERM, &old_term, 0);
++ kill(-pgroup, SIGTERM);
++ }
+ #endif
+
+ /* We should exit at this point, but MacOSX doesn't seem to */
+ 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
++
++ /* This will make FCGI shutdown itself later in the loop, however we should finish our request cleanly */
++ fcgi_shutdown();
++
++ /* Whoever we also close the listeing socket (which PHP itself doesn't seem to do?!) */
++ closesocket(fcgi_fd);
++ fcgi_fd = -1;
++}
++
++
+ 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)
+@@ -1328,7 +1354,6 @@
+ int requests = 0;
+ int fastcgi = fcgi_is_fastcgi();
+ char *bindpath = NULL;
+- int fcgi_fd = 0;
+ fcgi_request request;
+ int repeats = 1;
+ int benchmark = 0;
+@@ -1581,7 +1606,10 @@
+ /* don't catch our signals */
+ sigaction(SIGTERM, &old_term, 0);
+ sigaction(SIGQUIT, &old_quit, 0);
+- sigaction(SIGINT, &old_int, 0);
++ /* handler for SIGINT */
++ act.sa_flags = 0;
++ act.sa_handler = fastcgi_graceful_shutdown;
++ sigaction(SIGINT, &act, &old_int);
+ break;
+ case -1:
+ perror("php (pre-forking)");
================================================================
More information about the pld-cvs-commit
mailing list