summaryrefslogtreecommitdiff
path: root/sapi/apache/mod_php5.c
diff options
context:
space:
mode:
authorRasmus Lerdorf <rasmus@php.net>2008-03-18 21:42:50 +0000
committerRasmus Lerdorf <rasmus@php.net>2008-03-18 21:42:50 +0000
commit6c158374ba57792b0e283053e0a22944a42ef25b (patch)
tree2a45ed6760070254817be81a96ae26f3ed491b86 /sapi/apache/mod_php5.c
parent10afe5d96bc3d562958e905102de1db44188ac2b (diff)
downloadphp-git-6c158374ba57792b0e283053e0a22944a42ef25b.tar.gz
exit_on_timeout patch
After the sigsetjmp change, this is patch #2 in an effort to get some sanity restored to signal handling in PHP. This patch does two things. First, it makes it possible to reset the timeout without resetting the signal handlers. This is important for cases where an extension may have deferred signals in its MINIT in order to implement critical sections. It also lays the groundwork for cleaning up our signal handling and perhaps eventually implementing our own signal deferring mechanism so we can have true critical sections. The second thing this does is to make it possible to terminate the current child process (only for Apache1 at the moment) on a timeout. There are a number of extensions that are unhappy about being longjmp'ed out of and when this happens on a timeout they are left in an inconsistent state. By turning on exit_on_timeout you can now force the process to terminate on a timeout which will clean up any hanging locks and/or memory left hanging after the longjmp.
Diffstat (limited to 'sapi/apache/mod_php5.c')
-rw-r--r--sapi/apache/mod_php5.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sapi/apache/mod_php5.c b/sapi/apache/mod_php5.c
index d84b11e548..381fa919d2 100644
--- a/sapi/apache/mod_php5.c
+++ b/sapi/apache/mod_php5.c
@@ -434,6 +434,14 @@ static time_t php_apache_get_request_time(TSRMLS_D)
}
/* }}} */
+/* {{{ sapi_apache_child_terminate
+ */
+static void sapi_apache_child_terminate(TSRMLS_D)
+{
+ ap_child_terminate((request_rec *)SG(server_context));
+}
+/* }}} */
+
/* {{{ sapi_module_struct apache_sapi_module
*/
static sapi_module_struct apache_sapi_module = {
@@ -463,6 +471,7 @@ static sapi_module_struct apache_sapi_module = {
sapi_apache_register_server_variables, /* register server variables */
php_apache_log_message, /* Log message */
php_apache_get_request_time, /* Get request time */
+ sapi_apache_child_terminate,
NULL, /* php.ini path override */