From 0b1971bfc0e8728e4d497626863c298c365e1715 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Thu, 15 Oct 2009 03:27:59 +0000 Subject: [PATCH] more bug fixes --- Robust/src/IR/Flat/BuildCode.java | 6 +++--- Robust/src/Runtime/STM/commit.c | 22 ++++++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 144085e0..82f889ba 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -3674,7 +3674,7 @@ public class BuildCode { if (state.SINGLETM) { //Single machine transaction case String dst=generateTemp(fm, fen.getDst(),lb); - if (!state.STMARRAY||wb.needBarrier(fen)||locality.getNodePreTempInfo(lb, fen).get(fen.getSrc())==LocalityAnalysis.SCRATCH) { + if ((!state.STMARRAY)||(!wb.needBarrier(fen))||locality.getNodePreTempInfo(lb, fen).get(fen.getSrc())==LocalityAnalysis.SCRATCH||locality.getAtomic(lb).get(fen).intValue()==0) { output.println(dst +"=(("+ type+"*)(((char *) &("+ generateTemp(fm,fen.getSrc(),lb)+"->___length___))+sizeof(int)))["+generateTemp(fm, fen.getIndex(),lb)+"];"); } else { output.println("STMGETARRAY("+dst+", "+ generateTemp(fm,fen.getSrc(),lb)+", "+generateTemp(fm, fen.getIndex(),lb)+", "+type+");"); @@ -3747,14 +3747,14 @@ public class BuildCode { } else { output.println("INTPTR srcoid=(INTPTR)"+src+";"); } - if (state.STMARRAY&&locality.getNodePreTempInfo(lb, fsen).get(fsen.getDst())!=LocalityAnalysis.SCRATCH&&wb.needBarrier(fsen)) { + if (state.STMARRAY&&locality.getNodePreTempInfo(lb, fsen).get(fsen.getDst())!=LocalityAnalysis.SCRATCH&&wb.needBarrier(fsen)&&locality.getAtomic(lb).get(fsen).intValue()>0) { output.println("STMSETARRAY("+generateTemp(fm, fsen.getDst(),lb)+", "+generateTemp(fm, fsen.getIndex(),lb)+", srcoid, INTPTR);"); } else { output.println("((INTPTR*)(((char *) &("+ generateTemp(fm,fsen.getDst(),lb)+"->___length___))+sizeof(int)))["+generateTemp(fm, fsen.getIndex(),lb)+"]=srcoid;"); } output.println("}"); } else { - if (state.STMARRAY&&locality.getNodePreTempInfo(lb, fsen).get(fsen.getDst())!=LocalityAnalysis.SCRATCH&&wb.needBarrier(fsen)) { + if (state.STMARRAY&&locality.getNodePreTempInfo(lb, fsen).get(fsen.getDst())!=LocalityAnalysis.SCRATCH&&wb.needBarrier(fsen)&&locality.getAtomic(lb).get(fsen).intValue()>0) { output.println("STMSETARRAY("+generateTemp(fm, fsen.getDst(),lb)+", "+generateTemp(fm, fsen.getIndex(),lb)+", "+ generateTemp(fm, fsen.getSrc(), lb) +", "+type+");"); } else { output.println("(("+type +"*)(((char *) &("+ generateTemp(fm,fsen.getDst(),lb)+"->___length___))+sizeof(int)))["+generateTemp(fm, fsen.getIndex(),lb)+"]="+generateTemp(fm,fsen.getSrc(),lb)+";"); diff --git a/Robust/src/Runtime/STM/commit.c b/Robust/src/Runtime/STM/commit.c index 5cccde91..d52f3d1e 100644 --- a/Robust/src/Runtime/STM/commit.c +++ b/Robust/src/Runtime/STM/commit.c @@ -291,16 +291,14 @@ int transCommit() { dirwrlocked[numoidwrlocked++] = objptr; \ } \ if (addrdobject) { \ - rdlockedarray[numoidrdlockedarray++]=objptr; \ + oidrdlockedarray[numoidrdlockedarray++]=objptr; \ } \ } else #define READARRAYS \ for(i=0; i___objlocation___; \ int lowoffset=(transao->lowindex)>>INDEXSHIFT; \ int highoffset=(transao->highindex)>>INDEXSHIFT; \ int j; \ @@ -320,6 +318,19 @@ int transCommit() { freearrays; \ return TRANS_ABORT; \ } \ + } else { \ + unsigned int localversion; \ + unsigned int remoteversion; \ + GETVERSIONVAL(localversion, transao, j); \ + GETVERSIONVAL(remoteversion, mainao, j); \ + if (localversion==remoteversion) \ + softabort=1; \ + transAbortProcess(oidwrlocked, NUMWRTOTAL); \ + freearrays; \ + if (softabort) \ + return TRANS_SOFT_ABORT; \ + else \ + return TRANS_ABORT; \ } \ } \ } \ @@ -695,7 +706,6 @@ int alttraverseCache() { #endif //THIS IS THE SERIALIZATION END POINT (START POINT IS END OF EXECUTION)***** - READARRAYS; for(i=0; i