mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Fixed GC bug
This commit is contained in:
parent
d1f40f7439
commit
88bf6d2e16
1 changed files with 23 additions and 19 deletions
|
@ -414,19 +414,21 @@ static void gc_mark_roots(TSRMLS_D)
|
|||
gc_root_buffer *current = GC_G(roots).next;
|
||||
|
||||
while (current != &GC_G(roots)) {
|
||||
if (current->handle && EG(objects_store).object_buckets) {
|
||||
struct _store_object *obj = &EG(objects_store).object_buckets[current->handle].bucket.obj;
|
||||
if (current->handle) {
|
||||
if (EG(objects_store).object_buckets) {
|
||||
struct _store_object *obj = &EG(objects_store).object_buckets[current->handle].bucket.obj;
|
||||
|
||||
if (GC_GET_COLOR(obj->buffered) == GC_PURPLE) {
|
||||
zval z;
|
||||
if (GC_GET_COLOR(obj->buffered) == GC_PURPLE) {
|
||||
zval z;
|
||||
|
||||
INIT_PZVAL(&z);
|
||||
Z_OBJ_HANDLE(z) = current->handle;
|
||||
Z_OBJ_HT(z) = current->u.handlers;
|
||||
zobj_mark_grey(obj, &z TSRMLS_CC);
|
||||
} else {
|
||||
GC_SET_ADDRESS(obj->buffered, NULL);
|
||||
GC_REMOVE_FROM_BUFFER(current);
|
||||
INIT_PZVAL(&z);
|
||||
Z_OBJ_HANDLE(z) = current->handle;
|
||||
Z_OBJ_HT(z) = current->u.handlers;
|
||||
zobj_mark_grey(obj, &z TSRMLS_CC);
|
||||
} else {
|
||||
GC_SET_ADDRESS(obj->buffered, NULL);
|
||||
GC_REMOVE_FROM_BUFFER(current);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (GC_ZVAL_GET_COLOR(current->u.pz) == GC_PURPLE) {
|
||||
|
@ -623,15 +625,17 @@ static void gc_collect_roots(TSRMLS_D)
|
|||
gc_root_buffer *current = GC_G(roots).next;
|
||||
|
||||
while (current != &GC_G(roots)) {
|
||||
if (current->handle && EG(objects_store).object_buckets) {
|
||||
struct _store_object *obj = &EG(objects_store).object_buckets[current->handle].bucket.obj;
|
||||
zval z;
|
||||
if (current->handle) {
|
||||
if (EG(objects_store).object_buckets) {
|
||||
struct _store_object *obj = &EG(objects_store).object_buckets[current->handle].bucket.obj;
|
||||
zval z;
|
||||
|
||||
GC_SET_ADDRESS(obj->buffered, NULL);
|
||||
INIT_PZVAL(&z);
|
||||
Z_OBJ_HANDLE(z) = current->handle;
|
||||
Z_OBJ_HT(z) = current->u.handlers;
|
||||
zobj_collect_white(&z TSRMLS_CC);
|
||||
GC_SET_ADDRESS(obj->buffered, NULL);
|
||||
INIT_PZVAL(&z);
|
||||
Z_OBJ_HANDLE(z) = current->handle;
|
||||
Z_OBJ_HT(z) = current->u.handlers;
|
||||
zobj_collect_white(&z TSRMLS_CC);
|
||||
}
|
||||
} else {
|
||||
GC_ZVAL_SET_ADDRESS(current->u.pz, NULL);
|
||||
zval_collect_white(current->u.pz TSRMLS_CC);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue