objConfRead|=effect.hasReadConflict;
objConfWrite|=effect.hasWriteConflict;
}
-
+ currCase.append(" int tmpvar;");
+
if (objConfRead) {
currCase.append(" if(");
checkWaitingQueue(currCase, taint, node);
- currCase.append("||");
+ currCase.append("||!");
}
int index=-1;
assert heaprootNum != -1;
int allocSiteID = connectedHRHash.get(taint).getWaitingQueueBucketNum(node);
int traverserID = doneTaints.get(taint);
- currCase.append(" rcr_WRITEBINCASE(allHashStructures["+heaprootNum+"],"+prefix+", (SESEcommon *) record, "+index+")");
+ currCase.append(" (tmpvar=rcr_WRITEBINCASE(allHashStructures["+heaprootNum+"],"+prefix+", (SESEcommon *) record, "+index+"))");
} else if (primConfRead||objConfRead) {
int heaprootNum = connectedHRHash.get(taint).id;
assert heaprootNum != -1;
int allocSiteID = connectedHRHash.get(taint).getWaitingQueueBucketNum(node);
int traverserID = doneTaints.get(taint);
- currCase.append(" rcr_READBINCASE(allHashStructures["+heaprootNum+"],"+prefix+", (SESEcommon *) record, "+index+")");
+ currCase.append(" (tmpvar=rcr_READBINCASE(allHashStructures["+heaprootNum+"],"+prefix+", (SESEcommon *) record, "+index+"))");
}
if(objConfRead) {
- currCase.append(") {\n");
+ currCase.append("&READYMASK) {\n");
putIntoWaitingQueue(currCase, taint, node, prefix);
currCase.append(" break;\n");
currCase.append(" }\n");
return (((struct ___Object___ *) ptr)->oid)&RH_MASK;
}
+//consider SPEC flag
+
int rcr_WRITEBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int index) {
//chain of bins exists => tail is valid
//if there is something in front of us, then we are not ready
if (!(bit & td->bitindexwr)) {
td->bitindexwr|=bit;
td->bitindexrd|=bit;
- return (bintail->status==READY)?READY:SPECNOTREADY;
+ return (bintail->status==READY)?SPECREADY:SPECNOTREADY;
} else
- return READY;
+ return SPECREADY;
}
} else {
TraverserData * td = &((ReadBinItem_rcr *)bintail)->array[((ReadBinItem_rcr *)bintail)->index - 1];