only call mark once...
authorbdemsky <bdemsky>
Mon, 20 Jun 2011 10:22:44 +0000 (10:22 +0000)
committerbdemsky <bdemsky>
Mon, 20 Jun 2011 10:22:44 +0000 (10:22 +0000)
Robust/src/Runtime/bamboo/multicoregarbage.c
Robust/src/Runtime/bamboo/multicoregcmark.c
Robust/src/Runtime/bamboo/multicoregcmark.h

index c2172ef35f72ba7912f2437f1a039f8fd5d7109f..a3b20e5f7c29d21418901cf38f4032114068fa61 100644 (file)
@@ -288,7 +288,7 @@ void gc_collect(struct garbagelist * stackptr) {
   WAITFORGCPHASE(MARKPHASE);
 
   GC_PRINTF("Start mark phase\n");
-  mark(true, stackptr);
+  mark(stackptr);
   GC_PRINTF("Finish mark phase, start compact phase\n");
   compact();
   GC_PRINTF("Finish compact phase\n");
@@ -330,7 +330,7 @@ void gc_nocollect(struct garbagelist * stackptr) {
   WAITFORGCPHASE(MARKPHASE);
 
   GC_PRINTF("Start mark phase\n"); 
-  mark(true, stackptr);
+  mark(stackptr);
   GC_PRINTF("Finish mark phase, wait for flush\n");
 
   // non-gc core collector routine
@@ -355,19 +355,13 @@ void gc_nocollect(struct garbagelist * stackptr) {
 }
 
 void master_mark(struct garbagelist *stackptr) {
-  bool isfirst = true;
 
   GC_PRINTF("Start mark phase \n");
   GC_SEND_MSG_1_TO_CLIENT(GCSTART);
   gc_status_info.gcphase = MARKPHASE;
   // mark phase
 
-  while(MARKPHASE == gc_status_info.gcphase) {
-    mark(isfirst, stackptr);
-    isfirst=false;
-    // check gcstatus
-    checkMarkStatus();
-  }
+  mark(stackptr);
 }
 
 void master_getlargeobjs() {
index 18866c4af6b44a65a5d0cbc2d949e6a96de853bd..72ff2ec96ed3b9f017146bce1be9d98761962a17 100644 (file)
@@ -243,11 +243,10 @@ INLINE void scanPtrsInObj(void * ptr, int type) {
   }
 }
 
-void mark(bool isfirst, struct garbagelist * stackptr) {
-  if(isfirst) {
-    // enqueue root objs
-    tomark(stackptr);
-  }
+void mark(struct garbagelist * stackptr) {
+  // enqueue root objs
+  tomark(stackptr);
+
   unsigned int isize = 0;
   bool sendStall = false;
   // mark phase
@@ -293,7 +292,7 @@ void mark(bool isfirst, struct garbagelist * stackptr) {
     }
     
     if(BAMBOO_NUM_OF_CORE == STARTUPCORE)
-      return;
+      checkMarkStatus();
   }
 
   BAMBOO_CACHE_MF();
index 1dac20a8edb6ca16cde9aa22576d53c4f989b1b6..2d91b93ed17e9493f3d922173a920087e6444132 100644 (file)
@@ -10,7 +10,7 @@ INLINE void markgarbagelist(struct garbagelist * listptr);
 INLINE void tomark(struct garbagelist * stackptr);
 INLINE void scanPtrsInObj(void * ptr, int type);
 void markObj(void * objptr);
-void mark(bool isfirst, struct garbagelist * stackptr);
+void mark(struct garbagelist * stackptr);
 
 #endif // MULTICORE_GC
 #endif // BAMBOO_MULTICORE_GC_MARK_H