summaryrefslogtreecommitdiff
path: root/Zend/zend.h
diff options
context:
space:
mode:
authorRasmus Lerdorf <rasmus@php.net>2008-03-18 18:34:11 +0000
committerRasmus Lerdorf <rasmus@php.net>2008-03-18 18:34:11 +0000
commitc9e0781d2abab740f81a620c27a30391a11466ab (patch)
treefde421399331cf0d8c560d5a028c0be04a4f6407 /Zend/zend.h
parent4d9cbaf7a4e51b98479fc51a33479fe69e56a8f5 (diff)
downloadphp-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.h6
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;