]> granicus.if.org Git - php/commitdiff
Fix the mess in SIGSEGV handling, hopefully
authorZeev Suraski <zeev@php.net>
Fri, 9 Jul 1999 07:35:13 +0000 (07:35 +0000)
committerZeev Suraski <zeev@php.net>
Fri, 9 Jul 1999 07:35:13 +0000 (07:35 +0000)
Zend/zend_execute_API.c

index bce067597d7661a1d55e5dabbe30fcca55f7f9bb..9679ff92dd0ce3b0e538ebff14682bc50fb44b30 100644 (file)
 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
 }