dmitry Fri, 03 Sep 2010 09:27:47 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=303016
Log: Fixed GC bug Changed paths: U php/php-src/branches/PHP_5_3/Zend/zend_gc.c U php/php-src/trunk/Zend/zend_gc.c Modified: php/php-src/branches/PHP_5_3/Zend/zend_gc.c =================================================================== --- php/php-src/branches/PHP_5_3/Zend/zend_gc.c 2010-09-03 06:41:59 UTC (rev 303015) +++ php/php-src/branches/PHP_5_3/Zend/zend_gc.c 2010-09-03 09:27:47 UTC (rev 303016) @@ -414,19 +414,21 @@ 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 @@ 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); Modified: php/php-src/trunk/Zend/zend_gc.c =================================================================== --- php/php-src/trunk/Zend/zend_gc.c 2010-09-03 06:41:59 UTC (rev 303015) +++ php/php-src/trunk/Zend/zend_gc.c 2010-09-03 09:27:47 UTC (rev 303016) @@ -414,19 +414,21 @@ 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 @@ 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);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php