helly Sun Jul 25 13:37:56 2004 EDT
Modified files: (Branch: PHP_5_0)
/ZendEngine2 zend_execute.c zend_objects_API.c zend_objects_API.h
Log:
- MFH: Fix bug #29368 : The destructor is called when an exception is
thrown from the constructor
http://cvs.php.net/diff.php/ZendEngine2/zend_execute.c?r1=1.652.2.1&r2=1.652.2.2&ty=u
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.652.2.1
ZendEngine2/zend_execute.c:1.652.2.2
--- ZendEngine2/zend_execute.c:1.652.2.1 Fri Jul 16 03:26:49 2004
+++ ZendEngine2/zend_execute.c Sun Jul 25 13:37:55 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_execute.c,v 1.652.2.1 2004/07/16 07:26:49 helly Exp $ */
+/* $Id: zend_execute.c,v 1.652.2.2 2004/07/25 17:37:55 helly Exp $ */
#define ZEND_INTENSIVE_DEBUGGING 0
@@ -2777,6 +2777,9 @@
if (EG(This)) {
if (EG(exception) && EX(fbc) &&
EX(fbc)->common.fn_flags&ZEND_ACC_CTOR) {
EG(This)->refcount--;
+ if (EG(This)->refcount == 1) {
+ zend_object_store_ctor_failed(EG(This) TSRMLS_CC);
+ }
zval_ptr_dtor(&EG(This));
} else if (should_change_scope) {
zval_ptr_dtor(&EG(This));
http://cvs.php.net/diff.php/ZendEngine2/zend_objects_API.c?r1=1.41&r2=1.41.2.1&ty=u
Index: ZendEngine2/zend_objects_API.c
diff -u ZendEngine2/zend_objects_API.c:1.41
ZendEngine2/zend_objects_API.c:1.41.2.1
--- ZendEngine2/zend_objects_API.c:1.41 Sun May 23 16:33:09 2004
+++ ZendEngine2/zend_objects_API.c Sun Jul 25 13:37:55 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_objects_API.c,v 1.41 2004/05/23 20:33:09 andi Exp $ */
+/* $Id: zend_objects_API.c,v 1.41.2.1 2004/07/25 17:37:55 helly Exp $ */
#include "zend.h"
#include "zend_globals.h"
@@ -204,6 +204,15 @@
zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
EG(objects_store).object_buckets[handle].bucket.obj.object = object;
+}
+
+
+/* Called when the ctor was terminated by an exception */
+ZEND_API void zend_object_store_ctor_failed(zval *zobject TSRMLS_DC)
+{
+ zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
+
+ EG(objects_store).object_buckets[handle].destructor_called = 1;
}
http://cvs.php.net/diff.php/ZendEngine2/zend_objects_API.h?r1=1.14&r2=1.14.2.1&ty=u
Index: ZendEngine2/zend_objects_API.h
diff -u ZendEngine2/zend_objects_API.h:1.14
ZendEngine2/zend_objects_API.h:1.14.2.1
--- ZendEngine2/zend_objects_API.h:1.14 Tue May 25 10:19:19 2004
+++ ZendEngine2/zend_objects_API.h Sun Jul 25 13:37:55 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_objects_API.h,v 1.14 2004/05/25 14:19:19 andi Exp $ */
+/* $Id: zend_objects_API.h,v 1.14.2.1 2004/07/25 17:37:55 helly Exp $ */
#ifndef ZEND_OBJECTS_API_H
#define ZEND_OBJECTS_API_H
@@ -68,6 +68,7 @@
ZEND_API void *zend_object_store_get_object(zval *object TSRMLS_DC);
/* See comment in zend_objects_API.c before you use this */
ZEND_API void zend_object_store_set_object(zval *zobject, void *object
TSRMLS_DC);
+ZEND_API void zend_object_store_ctor_failed(zval *zobject TSRMLS_DC);
ZEND_API void zend_objects_store_free_object_storage(zend_objects_store
*objects TSRMLS_DC);
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
|