From: bdemsky <bdemsky>
Date: Fri, 6 Feb 2009 08:10:19 +0000 (+0000)
Subject: changes to allow abortting a transaction early
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e4f4823c236e47d5e68843a3c46d9b893f6319e0;p=IRC.git

changes to allow abortting a transaction early
---

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