summaryrefslogtreecommitdiff
path: root/Zend/zend_generators.c
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2015-03-11 18:08:03 +0100
committerNikita Popov <nikic@php.net>2015-03-13 16:23:53 +0100
commita9d73f0646ca95134f5f2ada0899a7616c1ea705 (patch)
tree75ff73798e5867a4c5d174fcc075041e08c50b56 /Zend/zend_generators.c
parent6b643f0741e59fb2473e23c0ead6715b661845b1 (diff)
downloadphp-git-a9d73f0646ca95134f5f2ada0899a7616c1ea705.tar.gz
Fixed bug #69221
A generator iterator can be created from different zvals - use the object handle to manage references instead.
Diffstat (limited to 'Zend/zend_generators.c')
-rw-r--r--Zend/zend_generators.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index c96d1e979b..b457f56463 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -605,9 +605,9 @@ ZEND_METHOD(Generator, __wakeup)
static void zend_generator_iterator_dtor(zend_object_iterator *iterator TSRMLS_DC) /* {{{ */
{
- zval *object = ((zend_generator_iterator *) iterator)->object;
+ zend_generator_iterator *iter = (zend_generator_iterator *) iterator;
- zval_ptr_dtor(&object);
+ zend_objects_store_del_ref_by_handle(iter->handle TSRMLS_CC);
}
/* }}} */
@@ -699,8 +699,8 @@ zend_object_iterator *zend_generator_get_iterator(zend_class_entry *ce, zval *ob
/* We have to keep a reference to the generator object zval around,
* otherwise the generator may be destroyed during iteration. */
- Z_ADDREF_P(object);
- iterator->object = object;
+ iterator->handle = Z_OBJ_HANDLE_P(object);
+ zend_objects_store_add_ref_by_handle(iterator->handle TSRMLS_CC);
return (zend_object_iterator *) iterator;
}