diff options
| author | Nikita Popov <nikic@php.net> | 2015-03-11 18:08:03 +0100 |
|---|---|---|
| committer | Nikita Popov <nikic@php.net> | 2015-03-13 16:23:53 +0100 |
| commit | a9d73f0646ca95134f5f2ada0899a7616c1ea705 (patch) | |
| tree | 75ff73798e5867a4c5d174fcc075041e08c50b56 /Zend/zend_generators.c | |
| parent | 6b643f0741e59fb2473e23c0ead6715b661845b1 (diff) | |
| download | php-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.c | 8 |
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; } |
