You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by xl...@apache.org on 2007/08/27 10:12:01 UTC

svn commit: r570028 [4/4] - in /harmony/enhanced/drlvm/trunk/vm/gc_gen/src: common/ finalizer_weakref/ gen/ los/ mark_compact/ mark_sweep/ tests/ thread/ trace_forward/ utils/ verify/

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace.h?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace.h Mon Aug 27 01:11:57 2007
@@ -36,12 +36,12 @@
 
 typedef Blocked_Space Fspace;
 
-void fspace_initialize(GC* gc, void* start, POINTER_SIZE_INT fspace_size, POINTER_SIZE_INT commit_size);
+Fspace *fspace_initialize(GC* gc, void* start, POINTER_SIZE_INT fspace_size, POINTER_SIZE_INT commit_size);
 void fspace_destruct(Fspace *fspace);
 
 void* fspace_alloc(unsigned size, Allocator *allocator);
 
-void fspace_reset_for_allocation(Fspace* fspace);
+void fspace_reset_after_collection(Fspace* fspace);
 
 /* gen mode */
 void gen_forward_pool(Collector* collector); 

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_alloc.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_alloc.cpp?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_alloc.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_alloc.cpp Mon Aug 27 01:11:57 2007
@@ -20,6 +20,8 @@
  */
 
 #include "fspace.h"
+#include "../common/gc_concurrent.h"
+#include "../common/collection_scheduler.h"
 
 static Boolean fspace_alloc_block(Fspace* fspace, Allocator* allocator)
 {    
@@ -59,13 +61,15 @@
   p_return = thread_local_alloc(size, allocator);
   if (p_return)  return p_return;
 
+  if(gc_need_start_concurrent_mark(allocator->gc))
+    gc_start_concurrent_mark(allocator->gc);
   /* ran out local block, grab a new one*/  
   Fspace* fspace = (Fspace*)allocator->alloc_space;
   int attempts = 0;
   while( !fspace_alloc_block(fspace, allocator)){
     vm_gc_lock_enum();
     /* after holding lock, try if other thread collected already */
-    if ( !space_has_free_block((Blocked_Space*)fspace) ) {  
+    if ( !blocked_space_has_free_block((Blocked_Space*)fspace) ) {  
         if(attempts < 2) {
 #ifdef GC_GEN_STATS
         GC_Gen* gc = (GC_Gen*)allocator->gc;

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_gen_forward_pool.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_gen_forward_pool.cpp?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_gen_forward_pool.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_gen_forward_pool.cpp Mon Aug 27 01:11:57 2007
@@ -354,8 +354,6 @@
   
   gc_fix_rootset(collector);
   
-  fspace_reset_for_allocation(space);  
-
   TRACE2("gc.process", "GC: collector[0] finished");
 
   return;

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_nongen_forward_pool.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_nongen_forward_pool.cpp?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_nongen_forward_pool.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_nongen_forward_pool.cpp Mon Aug 27 01:11:57 2007
@@ -308,8 +308,6 @@
   
   gc_fix_rootset(collector);
   
-  fspace_reset_for_allocation(space);
-
   TRACE2("gc.process", "GC: collector[0] finished");
 
   return;

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/utils/vector_block.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/utils/vector_block.h?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/utils/vector_block.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/utils/vector_block.h Mon Aug 27 01:11:57 2007
@@ -64,7 +64,7 @@
 */
 
 inline Boolean vector_block_is_empty(Vector_Block* block)
-{ return block->tail == block->entries; }
+{ return block->tail == block->head; }
 
 inline void vector_block_add_entry(Vector_Block* block, POINTER_SIZE_INT value)
 {
@@ -73,6 +73,95 @@
 #endif
 
   *(block->tail++) = value; 
+}
+
+inline POINTER_SIZE_INT vector_block_get_entry(Vector_Block* block)
+{
+#ifdef _DEBUG
+  assert(!vector_block_is_empty(block));
+#endif
+
+  POINTER_SIZE_INT value = *(block->head++);
+
+#ifdef _DEBUG
+  assert(value);
+#endif
+  return value;
+}
+
+#define VECTOR_BLOCK_SHARE_BIT 0x01
+#define VECTOR_BLOCK_FULL_BIT  0x02
+#define VECTOR_BLOCK_SHARE_ID_SHIFT 0x05
+#define VECTOR_BLOCK_EXCLUSIVE_ID 0xFFff
+inline Boolean vector_block_is_shared(Vector_Block* block)
+{
+  return (Boolean)((POINTER_SIZE_INT)block->next & VECTOR_BLOCK_SHARE_BIT);
+}
+
+inline Boolean vector_block_is_set_full(Vector_Block* block)
+{
+  return (Boolean)((POINTER_SIZE_INT)block->next & VECTOR_BLOCK_FULL_BIT);
+}
+
+inline Boolean vector_block_set_full(Vector_Block* block)
+{
+  POINTER_SIZE_INT old_shared_var = (POINTER_SIZE_INT) block->next;
+  POINTER_SIZE_INT new_shared_var = old_shared_var | VECTOR_BLOCK_FULL_BIT;
+
+  while(TRUE){
+    POINTER_SIZE_INT old_var = (POINTER_SIZE_INT)atomic_casptr((volatile void **)& block->next ,(void*) new_shared_var,(void*) old_shared_var);
+    if(old_var == old_shared_var) return TRUE;
+    old_shared_var = (POINTER_SIZE_INT) block->next;
+    new_shared_var = old_shared_var | VECTOR_BLOCK_FULL_BIT;
+  }
+  assert(0);
+  return FALSE;
+
+}
+
+inline Boolean vector_block_set_shared(Vector_Block* block, unsigned int share_id)
+{
+  POINTER_SIZE_INT new_shared_var = (POINTER_SIZE_INT)((share_id << VECTOR_BLOCK_SHARE_ID_SHIFT) | VECTOR_BLOCK_SHARE_BIT);
+  POINTER_SIZE_INT old_shared_var = (POINTER_SIZE_INT) block->next;
+  if(old_shared_var != 0) return FALSE;
+
+  while(TRUE){
+    POINTER_SIZE_INT old_var = (POINTER_SIZE_INT)atomic_casptr((volatile void **)& block->next ,(void*) new_shared_var,(void*) old_shared_var);
+    if(old_var == old_shared_var) return TRUE;
+    old_shared_var = (POINTER_SIZE_INT) block->next;
+    if(old_shared_var != 0) return FALSE;
+  }    
+}
+
+inline Boolean vector_block_not_full_set_unshared(Vector_Block* block)
+{
+  POINTER_SIZE_INT new_shared_var = (POINTER_SIZE_INT) 0;
+  POINTER_SIZE_INT old_shared_var = (POINTER_SIZE_INT) block->next;
+
+  if(old_shared_var & VECTOR_BLOCK_FULL_BIT) return FALSE;
+
+  while(TRUE){
+    POINTER_SIZE_INT old_var = (POINTER_SIZE_INT)atomic_casptr((volatile void **)& block->next ,(void*) new_shared_var,(void*) old_shared_var);
+    if(old_var == old_shared_var) return TRUE;
+    old_shared_var = (POINTER_SIZE_INT) block->next;
+    if(old_shared_var & VECTOR_BLOCK_FULL_BIT) return FALSE;    
+  }
+  assert(0);
+  return FALSE;
+}
+
+inline Boolean vector_block_set_exclusive(Vector_Block* block)
+{
+  POINTER_SIZE_INT new_shared_var = (POINTER_SIZE_INT)((VECTOR_BLOCK_EXCLUSIVE_ID << VECTOR_BLOCK_SHARE_ID_SHIFT) | VECTOR_BLOCK_SHARE_BIT);
+  POINTER_SIZE_INT old_shared_var = (POINTER_SIZE_INT) block->next;
+  if(old_shared_var & VECTOR_BLOCK_SHARE_BIT) return FALSE;
+
+  while(TRUE){
+    POINTER_SIZE_INT old_var = (POINTER_SIZE_INT)atomic_casptr((volatile void **)& block->next ,(void*) new_shared_var,(void*) old_shared_var);
+    if(old_var == old_shared_var) return TRUE;
+    old_shared_var = (POINTER_SIZE_INT) block->next;
+    if(old_shared_var & VECTOR_BLOCK_SHARE_BIT) return FALSE;
+  }
 }
 
 inline void vector_block_clear(Vector_Block* block)

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_common.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_common.cpp?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_common.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_common.cpp Mon Aug 27 01:11:57 2007
@@ -83,13 +83,15 @@
 
 Boolean verify_rootset_slot(REF* p_ref, Heap_Verifier* heap_verifier)
 {
+  Partial_Reveal_Object* p_obj = read_slot(p_ref);
+  assert(address_belongs_to_gc_heap(p_obj,heap_verifier->gc));
+#ifndef USE_MARK_SWEEP_GC
   GC_Gen* gc    = (GC_Gen*)heap_verifier->gc;
   Space* mspace = gc_get_mos(gc);
   Space* lspace  = gc_get_los(gc);
 
-  Partial_Reveal_Object* p_obj = read_slot(p_ref);
   if(p_obj == NULL){
-    if(gc->collect_kind !=MINOR_COLLECTION ||(!heap_verifier->gc_is_gen_mode && !NOS_PARTIAL_FORWARD)){
+    if(gc_match_kind((GC*)gc, MAJOR_COLLECTION) ||(!heap_verifier->gc_is_gen_mode && !NOS_PARTIAL_FORWARD)){
       assert(0);
       return FALSE;
     }else{
@@ -106,12 +108,14 @@
   }
   assert(address_belongs_to_gc_heap(p_obj,heap_verifier->gc));
   if(heap_verifier->is_before_gc){
+#endif
     //if(!address_belongs_to_gc_heap(p_ref) && address_belongs_to_gc_heap(p_obj)){
     if(!address_belongs_to_gc_heap(p_obj, heap_verifier->gc)){
       printf("\nERROR: obj referenced by rootset is outside the heap error!\n");
       assert(0);
       return FALSE;
     }
+#ifndef USE_MARK_SWEEP_GC
   }else{
     if(heap_verifier->gc_verifier->is_before_fallback_collection){
       if(!address_belongs_to_gc_heap(p_obj, heap_verifier->gc)){
@@ -128,6 +132,7 @@
       return FALSE;
    }
   }
+#endif
   return TRUE;
 }
 
@@ -211,10 +216,12 @@
     gc_kind = " fallback collection.";
   }else if(gc_match_kind(gc, EXTEND_COLLECTION)){ 
     gc_kind = " extend collection.";
-  }else if(gc_match_kind(gc, MAJOR_COLLECTION)){ 
+  }else if(gc_match_kind(gc, NORMAL_MAJOR_COLLECTION)){ 
     if(gc->tuner->kind == TRANS_NOTHING)  gc_kind = "major collection (normal)";
     else if(gc->tuner->kind == TRANS_FROM_LOS_TO_MOS) gc_kind = "major collection (LOS shrink)";
     else if(gc->tuner->kind == TRANS_FROM_MOS_TO_LOS) gc_kind = "major collection (LOS extend)";
+  }else if(gc_match_kind(gc, MARK_SWEEP_GC)){
+    gc_kind = " mark sweep collection.";
   }
   printf(" GC_kind: %s\n", gc_kind);
 }
@@ -253,4 +260,5 @@
 {
     printf(" %-14s:    %-7s |   Before %10d   |   After %10d   |\n", "hashcode", "NUM", gc_verifier->num_hash_before_gc, gc_verifier->num_hash_after_gc);
 }
+
 

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_common.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_common.h?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_common.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_common.h Mon Aug 27 01:11:57 2007
@@ -22,10 +22,15 @@
 #include "../common/gc_common.h"
 #include "../common/gc_space.h"
 #include "../gen/gen.h"
+#include "../mark_sweep/gc_ms.h"
 #include "../common/space_tuner.h"
 #ifdef USE_32BITS_HASHCODE
 #include "../common/hashcode.h"
 #endif
+#ifdef USE_MARK_SWEEP_GC
+#include "../mark_sweep/sspace_mark_sweep.h"
+#endif
+#include "../common/gc_concurrent.h"
 
 struct Heap_Verifier;
 struct Allocation_Verifier;
@@ -113,6 +118,22 @@
   assert(p_obj);
   assert(uncompress_vt(obj_get_vt(p_obj)));
   assert(!address_belongs_to_gc_heap(uncompress_vt(obj_get_vt(p_obj)), (GC*)heap_verifier->gc));
+
+//ynhe
+
+#ifdef USE_MARK_SWEEP_GC
+  GC_MS* gc = (GC_MS*)heap_verifier->gc;
+  if(!heap_verifier->is_before_gc){
+    /*in GC_MS mark sweep algorithm, all live objects should be set their mark bit*/
+    assert(obj_is_alloc_color_in_table(p_obj));
+    if(!obj_is_alloc_color_in_table(p_obj))
+      printf("\nERROR: obj after GC should be set its alloc color!\n");
+  }else{
+    //ynhe
+    if(gc_mark_is_concurrent())
+      assert(obj_is_mark_black_in_table(p_obj));
+  }
+#endif
 }
 
 inline void verify_all_object_slot(REF* p_ref, Heap_Verifier* heap_verifier)

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_scanner.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_scanner.cpp?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_scanner.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verifier_scanner.cpp Mon Aug 27 01:11:57 2007
@@ -36,6 +36,7 @@
 static FORCE_INLINE void scan_object(Heap_Verifier* heap_verifier, Partial_Reveal_Object *p_obj) 
 {
   GC_Verifier* gc_verifier = heap_verifier->gc_verifier;
+#ifndef USE_MARK_SWEEP_GC
   if(gc_verifier->is_before_fallback_collection) {
     if(obj_belongs_to_nos(p_obj) && obj_is_fw_in_oi(p_obj)){
       assert(obj_get_vt(p_obj) == obj_get_vt(obj_get_fw_in_oi(p_obj)));
@@ -43,6 +44,7 @@
       assert(p_obj);
     }
   }
+#endif
   if(!obj_mark_in_vt(p_obj)) return;
  
   verify_object_header(p_obj, heap_verifier); 
@@ -204,9 +206,10 @@
 
 void verifier_scan_resurrect_objects(Heap_Verifier* heap_verifier)
 {
-  GC_Gen* gc    =  (GC_Gen*)heap_verifier->gc;
+  GC* gc    =  heap_verifier->gc;
   Heap_Verifier_Metadata* verifier_metadata = heap_verifier->heap_verifier_metadata;
   verifier_update_info_before_resurrect(heap_verifier);
+  return;
 #ifndef BUILD_IN_REFERENT
   heap_verifier->gc_verifier->is_tracing_resurrect_obj = TRUE;
   if(heap_verifier->is_before_gc){
@@ -361,6 +364,7 @@
 
 void verifier_scan_all_objects(Heap_Verifier* heap_verifier)
 {
+#ifndef USE_MARK_SWEEP_GC
   GC_Gen* gc       = (GC_Gen*)heap_verifier->gc;
   Space* fspace     = gc_get_nos(gc);
   Space* mspace   = gc_get_mos(gc);
@@ -369,6 +373,9 @@
   verifier_scan_nos_mos_objects(fspace, heap_verifier);
   verifier_scan_nos_mos_objects(mspace, heap_verifier);
   verifier_scan_los_objects(lspace, heap_verifier);
+#else
+  assert(0);
+#endif
 }
 /*<--------all objects scanner end--------->*/
 
@@ -405,6 +412,7 @@
 
 void verifier_scan_unreachable_objects(Heap_Verifier* heap_verifier)
 {
+#ifndef USE_MARK_SWEEP_GC
   if(heap_verifier->is_before_gc) return;
   GC_Gen* gc       = (GC_Gen*)heap_verifier->gc;  
   Space* mspace   = gc_get_mos(gc);
@@ -412,7 +420,9 @@
   
   verifier_scan_mos_unreachable_objects(mspace, heap_verifier);
   verifier_scan_los_unreachable_objects(lspace, heap_verifier);
-
+#else
+  return;
+#endif
 }
 /*<--------unreachable objects scanner end------>*/
 
@@ -421,4 +431,5 @@
   heap_verifier->live_obj_scanner = verifier_scan_live_objects;
   heap_verifier->all_obj_scanner   = verifier_scan_all_objects;
 }
+
 

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_gc_effect.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_gc_effect.cpp?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_gc_effect.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_gc_effect.cpp Mon Aug 27 01:11:57 2007
@@ -17,6 +17,9 @@
 
 #include "verifier_common.h"
 #include "verify_gc_effect.h"
+#ifdef USE_MARK_SWEEP_GC
+#include "../mark_sweep/sspace_mark_sweep.h"
+#endif
 
 static POINTER_SIZE_INT hash_obj_distance = 0;
 
@@ -144,7 +147,7 @@
   GC_Verifier* gc_verifier = heap_verifier->gc_verifier;
   assert(obj_belongs_to_space(p_obj, (Space*)fspace));
   unsigned int forwarded_first_part;
-  if(!gc_verifier->gc_collect_kind == MINOR_COLLECTION  || !NOS_PARTIAL_FORWARD || heap_verifier->gc_is_gen_mode)
+  if(!(gc_verifier->gc_collect_kind == MINOR_COLLECTION) || !NOS_PARTIAL_FORWARD || heap_verifier->gc_is_gen_mode)
     forwarded_first_part = true;
   else
     forwarded_first_part = forward_first_half^1;
@@ -293,6 +296,7 @@
   Heap_Verifier_Metadata* verifier_metadata = heap_verifier->heap_verifier_metadata;
   GC_Verifier* gc_verifier = heap_verifier->gc_verifier;
 
+#ifndef USE_MARK_SWEEP_GC
   GC_Gen* gc = (GC_Gen*)heap_verifier->gc;
   Space* mspace = gc_get_mos(gc);
   Space* nspace = gc_get_nos(gc);
@@ -313,6 +317,20 @@
       }
     }
   }
+#else
+  GC_MS* gc = (GC_MS*)heap_verifier->gc;
+  if(!heap_verifier->is_before_gc){
+    /*in GC_MS mark sweep algorithm, all live objects should be set their mark bit*/
+    assert(obj_is_alloc_color_in_table(p_obj));
+    if(!obj_is_alloc_color_in_table(p_obj))
+      printf("\nERROR: obj after GC should be set its alloc color!\n");
+  }else{
+    //ynhe
+    if(gc_mark_is_concurrent())
+      assert(obj_is_mark_black_in_table(p_obj));
+  }
+#endif
+
    /*store the object information*/
   void* p_obj_information =  verifier_copy_obj_information(p_obj);
   void* obj_hash_info = verifier_copy_hashcode(p_obj, heap_verifier, heap_verifier->is_before_gc);
@@ -532,4 +550,5 @@
 
 void verifier_reset_hash_distance()
 { hash_obj_distance = 0;}
+
 

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_live_heap.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_live_heap.cpp?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_live_heap.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_live_heap.cpp Mon Aug 27 01:11:57 2007
@@ -115,7 +115,7 @@
 void event_gc_collect_kind_changed(GC* gc)
 {
   /*GC collection kind were changed from normal MINOR or MAJOR  to FALLBACK MAJOR*/
-  assert(gc->collect_kind == FALLBACK_COLLECTION);
+  assert(gc_match_kind(gc, FALLBACK_COLLECTION));
   if(!heap_verifier->need_verify_gc) return;
   
   /*finish the fallbacked gc verify*/
@@ -145,6 +145,7 @@
 
 Heap_Verifier* get_heap_verifier()
 { return heap_verifier; }
+
 
 
 

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_mutator_effect.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_mutator_effect.cpp?rev=570028&r1=570027&r2=570028&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_mutator_effect.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/verify/verify_mutator_effect.cpp Mon Aug 27 01:11:57 2007
@@ -330,7 +330,7 @@
 void verifier_mark_wb_slots(Heap_Verifier* heap_verifier)
 {
   GC_Gen* gc = (GC_Gen*)(heap_verifier->gc);
-  if(gc->collect_kind != MINOR_COLLECTION ||!gc_is_gen_mode()) return;
+  if(gc_match_kind((GC*)gc, MAJOR_COLLECTION) ||!gc_is_gen_mode()) return;
 
   GC_Metadata*gc_metadata = gc->metadata;
   Space* nspace  = gc_get_nos(gc);
@@ -363,7 +363,7 @@
 void verify_write_barrier(REF* p_ref, Heap_Verifier* heap_verifier)
 {
   GC_Gen* gc    = (GC_Gen*)heap_verifier->gc;
-  if(gc->collect_kind != MINOR_COLLECTION ||!gc_is_gen_mode()) return;
+  if(gc_match_kind((GC*)gc, MAJOR_COLLECTION) ||!gc_is_gen_mode()) return;
   
   Space* nspace  = gc_get_nos(gc);
   assert(address_belongs_to_gc_heap((void*)p_ref, (GC *) gc));
@@ -432,5 +432,6 @@
   if(heap_verifier->need_verify_allocation)  verify_allocation(heap_verifier);
 }
  
+