/[svn]/php/php-src/branches/PHP_5_3/Zend/zend_gc.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 297307 by stas, Thu Apr 1 22:54:03 2010 UTC revision 303016 by dmitry, Fri Sep 3 09:27:47 2010 UTC
# Line 414  static void gc_mark_roots(TSRMLS_D) Line 414  static void gc_mark_roots(TSRMLS_D)
414          gc_root_buffer *current = GC_G(roots).next;          gc_root_buffer *current = GC_G(roots).next;
415    
416          while (current != &GC_G(roots)) {          while (current != &GC_G(roots)) {
417                  if (current->handle && EG(objects_store).object_buckets) {                  if (current->handle) {
418                          struct _store_object *obj = &EG(objects_store).object_buckets[current->handle].bucket.obj;                          if (EG(objects_store).object_buckets) {
419                                    struct _store_object *obj = &EG(objects_store).object_buckets[current->handle].bucket.obj;
420    
421                          if (GC_GET_COLOR(obj->buffered) == GC_PURPLE) {                                  if (GC_GET_COLOR(obj->buffered) == GC_PURPLE) {
422                                  zval z;                                          zval z;
423    
424                                  INIT_PZVAL(&z);                                          INIT_PZVAL(&z);
425                                  Z_OBJ_HANDLE(z) = current->handle;                                          Z_OBJ_HANDLE(z) = current->handle;
426                                  Z_OBJ_HT(z) = current->u.handlers;                                          Z_OBJ_HT(z) = current->u.handlers;
427                                  zobj_mark_grey(obj, &z TSRMLS_CC);                                          zobj_mark_grey(obj, &z TSRMLS_CC);
428                          } else {                                  } else {
429                                  GC_SET_ADDRESS(obj->buffered, NULL);                                          GC_SET_ADDRESS(obj->buffered, NULL);
430                                  GC_REMOVE_FROM_BUFFER(current);                                          GC_REMOVE_FROM_BUFFER(current);
431                                    }
432                          }                          }
433                  } else {                  } else {
434                          if (GC_ZVAL_GET_COLOR(current->u.pz) == GC_PURPLE) {                          if (GC_ZVAL_GET_COLOR(current->u.pz) == GC_PURPLE) {
# Line 623  static void gc_collect_roots(TSRMLS_D) Line 625  static void gc_collect_roots(TSRMLS_D)
625          gc_root_buffer *current = GC_G(roots).next;          gc_root_buffer *current = GC_G(roots).next;
626    
627          while (current != &GC_G(roots)) {          while (current != &GC_G(roots)) {
628                  if (current->handle && EG(objects_store).object_buckets) {                  if (current->handle) {
629                          struct _store_object *obj = &EG(objects_store).object_buckets[current->handle].bucket.obj;                          if (EG(objects_store).object_buckets) {
630                          zval z;                                  struct _store_object *obj = &EG(objects_store).object_buckets[current->handle].bucket.obj;
631                                    zval z;
632    
633                          GC_SET_ADDRESS(obj->buffered, NULL);                                  GC_SET_ADDRESS(obj->buffered, NULL);
634                          INIT_PZVAL(&z);                                  INIT_PZVAL(&z);
635                          Z_OBJ_HANDLE(z) = current->handle;                                  Z_OBJ_HANDLE(z) = current->handle;
636                          Z_OBJ_HT(z) = current->u.handlers;                                  Z_OBJ_HT(z) = current->u.handlers;
637                          zobj_collect_white(&z TSRMLS_CC);                                  zobj_collect_white(&z TSRMLS_CC);
638                            }
639                  } else {                  } else {
640                          GC_ZVAL_SET_ADDRESS(current->u.pz, NULL);                          GC_ZVAL_SET_ADDRESS(current->u.pz, NULL);
641                          zval_collect_white(current->u.pz TSRMLS_CC);                          zval_collect_white(current->u.pz TSRMLS_CC);

Legend:
Removed from v.297307  
changed lines
  Added in v.303016