mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Don't return embedded HT from WeakMap get_gc() handler
This HT is embedded in the WeakMap and as such musn't be freed by GC (or otherwise participate in GC). Instead add the values contained in it to the GC buffer.
This commit is contained in:
parent
5bde82a442
commit
e081db0410
1 changed files with 7 additions and 3 deletions
|
@ -420,9 +420,13 @@ static HashTable *zend_weakmap_get_properties_for(zend_object *object, zend_prop
|
||||||
static HashTable *zend_weakmap_get_gc(zend_object *object, zval **table, int *n)
|
static HashTable *zend_weakmap_get_gc(zend_object *object, zval **table, int *n)
|
||||||
{
|
{
|
||||||
zend_weakmap *wm = zend_weakmap_from(object);
|
zend_weakmap *wm = zend_weakmap_from(object);
|
||||||
*table = NULL;
|
zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
|
||||||
*n = 0;
|
zval *val;
|
||||||
return &wm->ht;
|
ZEND_HASH_FOREACH_VAL(&wm->ht, val) {
|
||||||
|
zend_get_gc_buffer_add_zval(gc_buffer, val);
|
||||||
|
} ZEND_HASH_FOREACH_END();
|
||||||
|
zend_get_gc_buffer_use(gc_buffer, table, n);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static zend_object *zend_weakmap_clone_obj(zend_object *old_object)
|
static zend_object *zend_weakmap_clone_obj(zend_object *old_object)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue