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.
CG(unclean_shutdown) = 1;
CG(in_compilation) = EG(in_execution) = 0;
EG(current_execute_data) = NULL;
- longjmp(*EG(bailout), FAILURE);
+ siglongjmp(*EG(bailout), FAILURE);
}
/* }}} */
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;
HashTable included_files; /* files already included */
- jmp_buf *bailout;
+ sigjmp_buf *bailout;
int error_reporting;
int orig_error_reporting;