diff options
| author | Rasmus Lerdorf <rasmus@php.net> | 2008-03-18 18:34:11 +0000 |
|---|---|---|
| committer | Rasmus Lerdorf <rasmus@php.net> | 2008-03-18 18:34:11 +0000 |
| commit | c9e0781d2abab740f81a620c27a30391a11466ab (patch) | |
| tree | fde421399331cf0d8c560d5a028c0be04a4f6407 /Zend/zend.h | |
| parent | 4d9cbaf7a4e51b98479fc51a33479fe69e56a8f5 (diff) | |
| download | php-git-c9e0781d2abab740f81a620c27a30391a11466ab.tar.gz | |
Use sigsetjmp and siglongjmp instead of setjmp/longjmp in order to be
consistent in how we deal with the signal mask. POSIX doesn't specify
what to do with the signal mask in setjmp/longjmp which has resulted in
the signal mask getting saved on *BSD and not getting saved on Linux.
Making the behaviour explicit via sigsetjmp/siglongjmp gives us
consistency and saves expensive sigprocmask() syscalls on *BSD.
Diffstat (limited to 'Zend/zend.h')
| -rw-r--r-- | Zend/zend.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Zend/zend.h b/Zend/zend.h index e85f40394c..2d7a21e1dc 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -522,11 +522,11 @@ END_EXTERN_C() #define zend_try \ { \ - jmp_buf *__orig_bailout = EG(bailout); \ - jmp_buf __bailout; \ + sigjmp_buf *__orig_bailout = EG(bailout); \ + sigjmp_buf __bailout; \ \ EG(bailout) = &__bailout; \ - if (setjmp(__bailout)==0) { + if (sigsetjmp(__bailout, 0)==0) { #define zend_catch \ } else { \ EG(bailout) = __orig_bailout; |
