mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'PHP-7.2'
This commit is contained in:
commit
6aa045e174
2 changed files with 34 additions and 7 deletions
27
Zend/tests/generators/gc_with_root_parent_mismatch.phpt
Normal file
27
Zend/tests/generators/gc_with_root_parent_mismatch.phpt
Normal file
|
@ -0,0 +1,27 @@
|
|||
--TEST--
|
||||
Generator GC when the yield from parent chain does not reach the root
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function root() {
|
||||
yield 1;
|
||||
yield 2;
|
||||
}
|
||||
|
||||
function delegate($gen) {
|
||||
yield from $gen;
|
||||
}
|
||||
|
||||
$gen = delegate(delegate(root()));
|
||||
$gen1 = delegate(delegate($gen));
|
||||
$gen2 = delegate(delegate($gen));
|
||||
var_dump($gen1->current());
|
||||
var_dump($gen2->current());
|
||||
$gen1->next();
|
||||
$gen1->next();
|
||||
gc_collect_cycles();
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
int(1)
|
||||
int(1)
|
|
@ -278,9 +278,9 @@ static uint32_t calc_gc_buffer_size(zend_generator *generator) /* {{{ */
|
|||
|
||||
/* Yield from root references */
|
||||
if (generator->node.children == 0) {
|
||||
zend_generator *child = generator, *root = generator->node.ptr.root;
|
||||
while (root != child) {
|
||||
child = child->node.parent;
|
||||
zend_generator *root = generator->node.ptr.root;
|
||||
while (root != generator) {
|
||||
root = zend_generator_get_child(&root->node, generator);
|
||||
size++;
|
||||
}
|
||||
}
|
||||
|
@ -343,10 +343,10 @@ static HashTable *zend_generator_get_gc(zval *object, zval **table, int *n) /* {
|
|||
}
|
||||
|
||||
if (generator->node.children == 0) {
|
||||
zend_generator *child = generator, *root = generator->node.ptr.root;
|
||||
while (root != child) {
|
||||
child = child->node.parent;
|
||||
ZVAL_OBJ(gc_buffer++, &child->std);
|
||||
zend_generator *root = generator->node.ptr.root;
|
||||
while (root != generator) {
|
||||
ZVAL_OBJ(gc_buffer++, &root->std);
|
||||
root = zend_generator_get_child(&root->node, generator);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue