inline the gc check
authorbdemsky <bdemsky>
Sun, 21 Dec 2008 05:37:08 +0000 (05:37 +0000)
committerbdemsky <bdemsky>
Sun, 21 Dec 2008 05:37:08 +0000 (05:37 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/garbage.c
Robust/src/Runtime/garbage.h

index faaeb3203dbf9eb16648c19ef0763ac717141f63..82a3d44b9469765b9e860fe47907eeeefe837a3a 100644 (file)
@@ -1483,9 +1483,9 @@ public class BuildCode {
     case FKind.FlatBackEdge:
       if ((state.THREAD||state.DSM)&&GENERATEPRECISEGC) {
        if(state.DSM&&locality.getAtomic(lb).get(fn).intValue()>0) {
-         output.println("checkcollect2(&"+localsprefix+",trans);");
+         output.println("if (needtocollect) checkcollect2(&"+localsprefix+",trans);");
        } else
-         output.println("checkcollect(&"+localsprefix+");");
+         output.println("if (needtocollect) checkcollect(&"+localsprefix+");");
       } else
        output.println("/* nop */");
       return;
index 5fab5b8a7604becdf089fd6c4ed4b03f3949a085..684bd7d37e6ebba9f63fe885eb4da7bafdd3d914 100644 (file)
@@ -406,25 +406,20 @@ void * tomalloc(int size) {
 
 #if defined(THREADS)||defined(DSTM)
 void checkcollect(void * ptr) {
-  if (needtocollect) {
-    struct listitem * tmp=stopforgc((struct garbagelist *)ptr);
-    pthread_mutex_lock(&gclock); // Wait for GC
-    restartaftergc(tmp);
-    pthread_mutex_unlock(&gclock);
-
-  }
+  struct listitem * tmp=stopforgc((struct garbagelist *)ptr);
+  pthread_mutex_lock(&gclock); // Wait for GC
+  restartaftergc(tmp);
+  pthread_mutex_unlock(&gclock);
 }
 
 #ifdef DSTM
 void checkcollect2(void * ptr, transrecord_t *trans) {
-  if (needtocollect) {
-    int ptrarray[]={1, (int)ptr, (int) trans->revertlist};
-    struct listitem * tmp=stopforgc((struct garbagelist *)ptrarray);
-    pthread_mutex_lock(&gclock); // Wait for GC
-    restartaftergc(tmp);
-    pthread_mutex_unlock(&gclock);
-    trans->revertlist=(struct ___Object___*)ptrarray[2];
-  }
+  int ptrarray[]={1, (int)ptr, (int) trans->revertlist};
+  struct listitem * tmp=stopforgc((struct garbagelist *)ptrarray);
+  pthread_mutex_lock(&gclock); // Wait for GC
+  restartaftergc(tmp);
+  pthread_mutex_unlock(&gclock);
+  trans->revertlist=(struct ___Object___*)ptrarray[2];
 }
 #endif
 
index 5a65de65db2d1adc0f239cbd690d381bdc80e3c8..46495d7dc9298283a9325cebf28a05cc5809efe1 100644 (file)
@@ -18,6 +18,7 @@ void fixtags();
 #endif
 
 #if defined(THREADS)||defined(DSTM)
+extern int needtocollect;
 void checkcollect(void * ptr);
 struct listitem * stopforgc(struct garbagelist * ptr);
 void restartaftergc(struct listitem * litem);