mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00:00
Crude generator GC for value/key/retval
These values remain live after the generator has been closed, so they are particularly susceptible to leaking cycles.
This commit is contained in:
parent
daf3d0c875
commit
aa3f44a395
15
Zend/tests/bug69989_1.phpt
Normal file
15
Zend/tests/bug69989_1.phpt
Normal file
@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
Bug #69989: Cycle collection for yielded values
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function gen() {
|
||||
yield yield;
|
||||
}
|
||||
$gen = gen();
|
||||
$gen->send($gen);
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
===DONE===
|
@ -193,6 +193,15 @@ static void zend_generator_free_storage(zend_object *object) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static HashTable *zend_generator_get_gc(zval *object, zval **table, int *n) /* {{{ */
|
||||
{
|
||||
zend_generator *generator = (zend_generator*) Z_OBJ_P(object);
|
||||
*table = &generator->value;
|
||||
*n = 3;
|
||||
return NULL;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_object *zend_generator_create(zend_class_entry *class_type) /* {{{ */
|
||||
{
|
||||
zend_generator *generator;
|
||||
@ -1128,6 +1137,7 @@ void zend_register_generator_ce(void) /* {{{ */
|
||||
memcpy(&zend_generator_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
|
||||
zend_generator_handlers.free_obj = zend_generator_free_storage;
|
||||
zend_generator_handlers.dtor_obj = zend_generator_dtor_storage;
|
||||
zend_generator_handlers.get_gc = zend_generator_get_gc;
|
||||
zend_generator_handlers.clone_obj = NULL;
|
||||
zend_generator_handlers.get_constructor = zend_generator_get_constructor;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user