Re: svn: /php/php-src/ branches/PHP_5_4/Zend/zend_execute_API.c trunk/Zend/zend_execute_API.c
| From: | Rasmus Lerdorf | Date: | Wed, 07 Sep 2011 18:54:00 +0000 |
| Subject: | Re: svn: /php/php-src/ branches/PHP_5_4/Zend/zend_execute_API.c trunk/Zend/zend_execute_API.c | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-55281@lists.php.net to get a copy of this message | ||
Please help me figure out if this fix causes any weird side-effects
anywhere. Essentially the problem is that the new deferred signals
patch ignores signals when running signal handlers. But since
register shutdown functions are called by the signal handler they
won't time out anymore. By pretending not to be running a signal
handler when we call the shutdown functions we can re-enable timeouts
here.
On 09/07/2011 11:48 AM, Rasmus Lerdorf wrote:
> rasmus Wed, 07 Sep 2011 18:48:17 +0000
>
> Revision:
> http://svn.php.net/viewvc?view=revision&revision=316382
>
> Log:
> Make timeouts work again for shutdown functions.
> Fixes the faling lang/045 test
>
> Changed paths:
> U php/php-src/branches/PHP_5_4/Zend/zend_execute_API.c
> U php/php-src/trunk/Zend/zend_execute_API.c
>
> Modified: php/php-src/branches/PHP_5_4/Zend/zend_execute_API.c
> ===================================================================
> --- php/php-src/branches/PHP_5_4/Zend/zend_execute_API.c 2011-09-07 18:47:22 UTC (rev 316381)
> +++ php/php-src/branches/PHP_5_4/Zend/zend_execute_API.c 2011-09-07 18:48:17 UTC (rev 316382)
> @@ -1328,6 +1328,13 @@
> TSRMLS_FETCH();
>
> if (zend_on_timeout) {
> + /*
> + We got here because we got a timeout signal, so we are in a signal handler
> + at this point. However, we want to be able to timeout any user-supplied
> + shutdown functions, so pretend we are not in a signal handler while we are
> + calling these
> + */
> + SIGG(running) = 0;
> zend_on_timeout(EG(timeout_seconds) TSRMLS_CC);
> }
>
>
> Modified: php/php-src/trunk/Zend/zend_execute_API.c
> ===================================================================
> --- php/php-src/trunk/Zend/zend_execute_API.c 2011-09-07 18:47:22 UTC (rev 316381)
> +++ php/php-src/trunk/Zend/zend_execute_API.c 2011-09-07 18:48:17 UTC (rev 316382)
> @@ -1328,6 +1328,13 @@
> TSRMLS_FETCH();
>
> if (zend_on_timeout) {
> + /*
> + We got here because we got a timeout signal, so we are in a signal handler
> + at this point. However, we want to be able to timeout any user-supplied
> + shutdown functions, so pretend we are not in a signal handler while we are
> + calling these
> + */
> + SIGG(running) = 0;
> zend_on_timeout(EG(timeout_seconds) TSRMLS_CC);
> }
>
>
>
>
>