From: Zeev Suraski Date: Fri, 9 Jul 1999 07:35:13 +0000 (+0000) Subject: Fix the mess in SIGSEGV handling, hopefully X-Git-Tag: BEFORE_REMOVING_GC_STEP1~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=81f552221053bbcd0f2cd31d0aac8abdf99e1ddc;p=php Fix the mess in SIGSEGV handling, hopefully --- diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index bce067597d..9679ff92dd 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -31,13 +31,17 @@ ZEND_API void (*zend_execute)(zend_op_array *op_array ELS_DC); +#if ZEND_DEBUG static void (*original_sigsegv_handler)(int); static void zend_handle_sigsegv(int dummy) { fflush(stdout); fflush(stderr); - signal(SIGSEGV, original_sigsegv_handler); - /* + if (original_sigsegv_handler==zend_handle_sigsegv) { + signal(SIGSEGV, original_sigsegv_handler); + } else { + signal(SIGSEGV, SIG_DFL); + } { ELS_FETCH(); @@ -48,9 +52,11 @@ static void zend_handle_sigsegv(int dummy) zend_get_executed_filename(ELS_C), zend_get_executed_lineno(ELS_C)); } - */ - original_sigsegv_handler(dummy); + if (original_sigsegv_handler!=zend_handle_sigsegv) { + original_sigsegv_handler(dummy); + } } +#endif static void zend_extension_activator(zend_extension *extension) @@ -81,7 +87,7 @@ void init_executor(CLS_D ELS_DC) EG(error_zval_ptr)=&EG(error_zval); zend_ptr_stack_init(&EG(arg_types_stack)); zend_stack_init(&EG(overloaded_objects_stack)); -#if !(WIN32||WINNT) +#if ZEND_DEBUG original_sigsegv_handler = signal(SIGSEGV, zend_handle_sigsegv); #endif EG(return_value) = &EG(global_return_value); @@ -129,6 +135,9 @@ void shutdown_executor(ELS_D) efree(EG(main_op_array)); } clean_non_persistent_constants(); +#if ZEND_DEBUG + signal(SIGSEGV, original_sigsegv_handler); +#endif }