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