diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2011-06-22 14:23:21 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2011-06-22 14:23:21 +0000 |
commit | 34d93f0c06706500d290424a757b6e4f7645bc78 (patch) | |
tree | 5c857c9aea9c9acb6c1e7acc9f31437071542aca /Zend/zend_execute_API.c | |
parent | 512be854e5ae9eedb734bf0377976c40117d2745 (diff) | |
download | php-git-34d93f0c06706500d290424a757b6e4f7645bc78.tar.gz |
Zend Signal Handling
Diffstat (limited to 'Zend/zend_execute_API.c')
-rw-r--r-- | Zend/zend_execute_API.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index e15344a4f0..f7594d9be1 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -1469,7 +1469,7 @@ void zend_set_timeout(long seconds, int reset_signals) /* {{{ */ # ifdef HAVE_SETITIMER { struct itimerval t_r; /* timeout requested */ - sigset_t sigset; + int signo; if(seconds) { t_r.it_value.tv_sec = seconds; @@ -1478,25 +1478,27 @@ void zend_set_timeout(long seconds, int reset_signals) /* {{{ */ # ifdef __CYGWIN__ setitimer(ITIMER_REAL, &t_r, NULL); } - if(reset_signals) { - signal(SIGALRM, zend_timeout); - sigemptyset(&sigset); - sigaddset(&sigset, SIGALRM); - } + signo = SIGALRM; # else setitimer(ITIMER_PROF, &t_r, NULL); } - if(reset_signals) { - signal(SIGPROF, zend_timeout); - sigemptyset(&sigset); - sigaddset(&sigset, SIGPROF); - } + signo = SIGPROF; # endif - if(reset_signals) { + + if (reset_signals) { +# ifdef ZEND_SIGNALS + zend_signal(signo, zend_timeout TSRMLS_CC); +# else + sigset_t sigset; + + signal(signo, zend_timeout); + sigemptyset(&sigset); + sigaddset(&sigset, signo); sigprocmask(SIG_UNBLOCK, &sigset, NULL); +# endif } } -# endif +# endif /* HAVE_SETITIMER */ #endif } /* }}} */ |