From: bdemsky Date: Sun, 21 Dec 2008 05:37:08 +0000 (+0000) Subject: inline the gc check X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c7ad2b31cfb9b94f54d2b3a99f442e95a8f91e5a;p=IRC.git inline the gc check --- diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index faaeb320..82a3d44b 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -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; diff --git a/Robust/src/Runtime/garbage.c b/Robust/src/Runtime/garbage.c index 5fab5b8a..684bd7d3 100644 --- a/Robust/src/Runtime/garbage.c +++ b/Robust/src/Runtime/garbage.c @@ -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 diff --git a/Robust/src/Runtime/garbage.h b/Robust/src/Runtime/garbage.h index 5a65de65..46495d7d 100644 --- a/Robust/src/Runtime/garbage.h +++ b/Robust/src/Runtime/garbage.h @@ -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);