Included is a patch that adds a PHP_FCGI_TIMEOUT that works
somewhat akin to PHP_FCGI_MAX_REQUESTS. With PHP_FCGI_TIMEOUT
set to 300 the whole fcgi process will terminate after 300 sec
with no request to any of the worker children - great for those
seldom used dynamically created fcgi scripts.
Cheers,
/Chris
PS. The patch works just as well in 5.0.2 as in 4.3.9.
diff -rub php-4.3.9/sapi/cgi/cgi_main.c php-4.3.9-ada/sapi/cgi/cgi_main.c
--- php-4.3.9/sapi/cgi/cgi_main.c 2004-07-15 00:38:18.000000000 +0200
+++ php-4.3.9-ada/sapi/cgi/cgi_main.c 2004-12-01 09:00:58.595259999 +0100
@@ -946,6 +946,24 @@
/* We should exit at this point, but MacOSX doesn't seem to */
exit( 0 );
}
+
+
+static int php_fcgi_timeout = 0;
+
+static void reset_timeout()
+{
+ alarm(php_fcgi_timeout);
+ /* fprintf(stderr, "FastCGI: reset timeout\n"); */
+ signal(SIGUSR1, reset_timeout);
+}
+
+static void handle_timeout()
+{
+ /* fprintf(stderr, "FastCGI: timeout\n"); */
+ fastcgi_cleanup(SIGALRM);
+ exit(0);
+}
+
#endif
/* {{{ main
@@ -980,6 +998,7 @@
#endif
#if PHP_FASTCGI
+ int php_fcgi_pid = getpid();
int max_requests = 500;
int requests = 0;
int fastcgi = !FCGX_IsCGI();
@@ -1178,6 +1197,20 @@
}
}
+ /* How long all children can be idle before terminating */
+ if( getenv( "PHP_FCGI_TIMEOUT" )) {
+ php_fcgi_timeout = atoi( getenv( "PHP_FCGI_TIMEOUT" ));
+ if( !php_fcgi_timeout ) {
+ fprintf( stderr,
+ "PHP_FCGI_TIMEOUT is not valid\n" );
+ return FAILURE;
+ }
+ /* [EMAIL PROTECTED]: children signal parent when they
do work, */
+ /* which resets the timeout value */
+ signal(SIGALRM, handle_timeout);
+ signal(SIGUSR1, reset_timeout);
+ }
+
/* make php call us to get _ENV vars */
php_php_import_environment_variables =
php_import_environment_variables;
php_import_environment_variables =
cgi_php_import_environment_variables;
@@ -1305,6 +1338,8 @@
while (!fastcgi
|| FCGX_Accept_r( &request ) >= 0) {
+ /* [EMAIL PROTECTED]: let parent know we have work to
do */
+ if (php_fcgi_timeout) kill(php_fcgi_pid, SIGUSR1);
#endif
#if PHP_FASTCGI
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php