From e4f4823c236e47d5e68843a3c46d9b893f6319e0 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 6 Feb 2009 08:10:19 +0000 Subject: [PATCH] changes to allow abortting a transaction early --- Robust/src/IR/Flat/BuildCode.java | 8 ++++++++ Robust/src/IR/State.java | 1 + Robust/src/IR/Tree/SemanticCheck.java | 2 +- Robust/src/Main/Main.java | 3 +++ Robust/src/buildscript | 7 ++++++- 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 6cc1e6c9..92e17331 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -124,6 +124,8 @@ public class BuildCode { outmethodheader.println("#include \"structdefs.h\""); if (state.DSM) outmethodheader.println("#include \"dstm.h\""); + if (state.ABORTREADERS) + outmethodheader.println("#include \"abortreaders.h\""); /* Output Structures */ outputStructs(outstructs); @@ -1725,6 +1727,7 @@ public class BuildCode { TempDescriptor tmp=tmpit.next(); output.println(generateTemp(fm, backuptable.get(tmp),lb)+"="+generateTemp(fm,tmp,lb)+";"); } + output.println("goto transstart"+faen.getIdentifier()+";"); /******* Print code to retry aborted transaction *******/ @@ -1750,6 +1753,11 @@ public class BuildCode { output.println("transstart"+faen.getIdentifier()+":"); output.println("trans=transStart();"); + + if (state.ABORTREADERS) { + output.println("if (setjmp(trans->aborttrans))"); + output.println(" goto transretry"+faen.getIdentifier()+":"); + } } public void generateFlatAtomicExitNode(FlatMethod fm, LocalityBinding lb, FlatAtomicExitNode faen, PrintWriter output) { diff --git a/Robust/src/IR/State.java b/Robust/src/IR/State.java index 3094fc21..36ed57ba 100644 --- a/Robust/src/IR/State.java +++ b/Robust/src/IR/State.java @@ -72,6 +72,7 @@ public class State { public static boolean PRINTFLAT=false; public static boolean PRINTSCHEDULING=false; public static boolean PRINTSCHEDULESIM=false; + public static boolean ABORTREADERS=false; public int CORENUM = 1; public String structfile; public String main; diff --git a/Robust/src/IR/Tree/SemanticCheck.java b/Robust/src/IR/Tree/SemanticCheck.java index d8c5d530..936ceefd 100644 --- a/Robust/src/IR/Tree/SemanticCheck.java +++ b/Robust/src/IR/Tree/SemanticCheck.java @@ -474,7 +474,7 @@ public class SemanticCheck { if (td!=null) if (!typeutil.isSuperorType(td,ln.getType())) - throw new Error("Field node returns "+ln.getType()+", but need "+td); + throw new Error("Field node returns "+ln.getType()+", but need "+td+" in "+md); } void checkNameNode(Descriptor md, SymbolTable nametable, NameNode nn, TypeDescriptor td) { diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index e976f9e4..a17807ec 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -87,6 +87,8 @@ public class Main { state.CONSCHECK=true; else if (option.equals("-task")) state.TASK=true; + else if (option.equals("-abortreaders")) + state.ABORTREADERS=true; else if (option.equals("-taskstate")) state.TASKSTATE=true; else if (option.equals("-tagstate")) @@ -138,6 +140,7 @@ public class Main { System.out.println("-struct structfile -- output structure declarations for repair tool"); System.out.println("-mainclass -- main function to call"); System.out.println("-dsm -- distributed shared memory support"); + System.out.println("-abortreaders -- abort readers"); System.out.println("-precise -- use precise garbage collection"); System.out.println("-conscheck -- turn on consistency checking"); System.out.println("-task -- compiler for tasks"); diff --git a/Robust/src/buildscript b/Robust/src/buildscript index 84650129..bd4928ed 100755 --- a/Robust/src/buildscript +++ b/Robust/src/buildscript @@ -3,6 +3,7 @@ printhelp() { echo -robustroot set up the ROBUSTROOT to directory other than default one echo -dsm distributed shared memory +echo -abortreaders abort readers immediately echo -trueprob double - probabiltiy of true branch echo -dsmcaching -enable caching in dsm runtime echo -mac distributed shared memory mac support @@ -95,6 +96,10 @@ exit elif [[ $1 = '-justanalyze' ]] then EXITAFTERANALYSIS=true +elif [[ $1 = '-abortreaders' ]] +then +EXTRAOPTIONS="$EXTRAOPTIONS -DABORTREADERS" +JAVAOPTS="$JAVAOPTS -abortreaders" elif [[ $1 = '-robustroot' ]] then ROBUSTROOT="$2" @@ -281,7 +286,7 @@ else if ! $NOJAVA then if ! ${ROBUSTROOT}/ourjava -Xms50m -Xmx600m $JAVAFORWARDOPTS -classpath $ROBUSTROOT/../cup/:$ROBUSTROOT Main.Main -classlibrary \ -$ROBUSTROOT/ClassLibrary/ -dir $BUILDDIR -precise \ +$ROBUSTROOT/ClassLibrary/ -dir $BUILDDIR \ $JAVAOPTS $SRCFILES then exit $? fi -- 2.34.1