missing checkin
authoradash <adash>
Tue, 9 Feb 2010 01:35:38 +0000 (01:35 +0000)
committeradash <adash>
Tue, 9 Feb 2010 01:35:38 +0000 (01:35 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/DSTM/interface/sandbox.c

index 1724ea38b0ff4d22f4c8811390e31bece1ebb592..e7b6291b0f9b95930cbe789f847c71a514344e1e 100644 (file)
@@ -2862,6 +2862,9 @@ public class BuildCode {
       if (state.SINGLETM&&state.SANDBOX&&(locality.getAtomic(lb).get(fn).intValue()>0)) {
        output.println("if (unlikely((--transaction_check_counter)<=0)) checkObjects();");
       }
+      if(state.DSM&&state.SANDBOX&&(locality.getAtomic(lb).get(fn).intValue()>0)) {
+        output.println("if (unlikely((--transaction_check_counter)<=0)) checkObjects();");
+      }
       if (((state.THREAD||state.DSM||state.SINGLETM)&&GENERATEPRECISEGC)
           || (this.state.MULTICOREGC)) {
        if(state.DSM&&locality.getAtomic(lb).get(fn).intValue()>0) {
index f1c0c7d7aee240e18bc97d4e39b79ffeb5fce1c6..e42ca4acd876764b738300c857fdf33a33c47321 100644 (file)
@@ -22,9 +22,16 @@ void errorhandler(int sig, struct sigcontext ctx) {
     t_chashDelete();
     _longjmp(aborttrans, 1);
   }
+  printf("Error in System at %s, %s(), %d\n", __FILE__, __func__, __LINE__);
+  print_trace();
   threadhandler(sig, ctx);
 }
 
+
+/* 
+ * returns 0 when read set objects are consistent
+ * returns 1 when objects are inconsistent
+ */
 int checktrans() {
  /* Create info to keep track of numelements */ 
   unsigned int size = c_size;
@@ -45,7 +52,7 @@ int checktrans() {
         machinenum = myIpAddr;
       } else if ((machinenum = lhashSearch(curr->key)) == 0) {
         printf("Error: No such machine %s, %d\n", __func__, __LINE__);
-        return 0;
+        return 1;
       }
       if(machinenum != myIpAddr)
         head = createList(head, headeraddr, machinenum, c_numelements);
@@ -58,21 +65,19 @@ int checktrans() {
     retval = verify(head);
   }
 
-  if(retval == 1) {
-    printf("Error in System at %s, %s(), %d\n", __FILE__, __func__, __LINE__);
-    print_trace();
+  if(retval == 1) { //consistent objects
     /* free head */
     deletehead(head);
-    exit(-1);
+    return 0;
   }
 
   if(retval == 0) {
     /* free head */
     deletehead(head);
-    return 1;
+    return 1; //return 1 when objects are inconsistent
   }
 
-  return 0; // return when objects inconsistent
+  return 0; 
 }
 
 nodeElem_t * createList(nodeElem_t *head, objheader_t *headeraddr, unsigned int mid,
@@ -171,6 +176,9 @@ void deletehead(nodeElem_t *head) {
   return;
 }
 
+
+/* returns 0 => Inconsistent Objects found, abort transaction */
+/* returns 1 => consistent objects found, error in system */
 /* Process the linked list of objects */
 int verify(nodeElem_t *pile) {
   /* create and initialize an array of sockets and reply receiving buffer */