Hello,
this patch introduced a bug in 5_3/HEAD, the timeout is no longer
checked in the shutdown function:
set_time_limit(1);
register_shutdown_function("plop");
function plop() {
while(1);
}
plop();
doesn't terminate
http://patches.colder.ch/php-src/shutdown_timeout-5_3.patch?markup
fixes it but I'm not sure it's the right way to do it. Can you please
take a look?
Thanks.
On Tue, Mar 18, 2008 at 11:42 PM, Rasmus Lerdorf <[email protected]> wrote:
> rasmus Tue Mar 18 21:42:51 2008 UTC
>
> Modified files: (Branch: PHP_5_3)
> /ZendEngine2 zend_execute.h zend_execute_API.c
> /php-src/main SAPI.c SAPI.h main.c php_globals.h
> /php-src/sapi/apache mod_php5.c
> Log:
> 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.
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
--
Etienne Kneuss
http://www.colder.ch
Men never do evil so completely and cheerfully as
when they do it from a religious conviction.
-- Pascal
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php