Browse Source

- Destructors must not be called twice

migration/RELEASE_1_0_0
Marcus Boerger 20 years ago
parent
commit
8e42a84335
  1. 3
      Zend/zend_objects.c
  2. 8
      Zend/zend_objects_API.c
  3. 1
      Zend/zend_objects_API.h

3
Zend/zend_objects.c

@ -50,7 +50,8 @@ ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handl
{
zend_function *destructor = object->ce->destructor;
if (destructor) {
if (destructor && !zend_objects_is_detructor_called(handle TSRMLS_CC)) {
zval zobj, *obj = &zobj;
zval *old_exception;

8
Zend/zend_objects_API.c

@ -135,6 +135,14 @@ ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC)
#endif
}
ZEND_API int zend_objects_is_detructor_called(zend_object_handle handle TSRMLS_DC)
{
if (EG(objects_store).object_buckets[handle].valid) {
return EG(objects_store).object_buckets[handle].destructor_called;
}
return 1;
}
/*
* Add a reference to an objects store entry given the object handle.
*/

1
Zend/zend_objects_API.h

@ -66,6 +66,7 @@ ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC);
ZEND_API void zend_objects_store_del_ref(zval *object TSRMLS_DC);
ZEND_API void zend_objects_store_add_ref_by_handle(zend_object_handle handle TSRMLS_DC);
ZEND_API void zend_objects_store_del_ref_by_handle(zend_object_handle handle TSRMLS_DC);
ZEND_API int zend_objects_is_detructor_called(zend_object_handle handle TSRMLS_DC);
ZEND_API zend_object_value zend_objects_store_clone_obj(zval *object TSRMLS_DC);
ZEND_API void *zend_object_store_get_object(zval *object TSRMLS_DC);
ZEND_API void *zend_object_store_get_object_by_handle(zend_object_handle handle TSRMLS_DC);

Loading…
Cancel
Save