From 32f9d0e180af2d809bf70e40850fc75e6d663945 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Thu, 14 Aug 2008 10:24:52 +0000 Subject: - MFH Improve exception linking --- Zend/zend_objects.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'Zend/zend_objects.c') diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c index 3e88eeefef..12aebc7c56 100644 --- a/Zend/zend_objects.c +++ b/Zend/zend_objects.c @@ -53,7 +53,6 @@ ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handl if (destructor) { zval *obj; - zval *old_exception; if (destructor->op_array.fn_flags & (ZEND_ACC_PRIVATE|ZEND_ACC_PROTECTED)) { if (destructor->op_array.fn_flags & ZEND_ACC_PRIVATE) { @@ -96,10 +95,12 @@ ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handl * For example, if an exception was thrown in a function and when the function's * local variable destruction results in a destructor being called. */ - old_exception = EG(exception); - EG(exception) = NULL; + if (EG(exception) && Z_OBJ_HANDLE_P(EG(exception)) == handle) { + zend_error(E_ERROR, "Attempt to destruct pending exception"); + } + zend_exception_save(TSRMLS_C); zend_call_method_with_0_params(&obj, object->ce, &destructor, ZEND_DESTRUCTOR_FUNC_NAME, NULL); - zend_exception_set_previous(old_exception TSRMLS_CC); + zend_exception_restore(TSRMLS_C); zval_ptr_dtor(&obj); } } -- cgit v1.2.1