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