transition = new TransitionEvent();
currentExecution.addTransition(transition);
transition.recordPredecessor(currentExecution, choiceCounter - 1);
+ // We have to check if there is a transition whose source state ID is the same
+ // If such exists, then we need to add its predecessors to the predecessor set of the current transition
+ for (TransitionEvent trans : rGraph.getReachableTransitionsAtState(stateId)) {
+ for (Predecessor pred : trans.getPredecessors()) {
+ transition.recordPredecessor(pred.getExecution(), pred.getChoice());
+ }
+ }
}
transition.setExecution(currentExecution);
transition.setTransitionCG(icsCG);
int newConflictChoice = conflictChoice;
Execution newConflictExecution = conflictExecution;
// Check if a conflict is found
- if (isConflictFound(conflictExecution, conflictChoice, predecessorExecution, predecessorChoice, currRWSet)) {
+ ReadWriteSet newCurrRWSet = currRWSet.getCopy();
+ if (isConflictFound(conflictExecution, conflictChoice, predecessorExecution, predecessorChoice, newCurrRWSet)) {
createBacktrackingPoint(conflictExecution, conflictChoice, predecessorExecution, predecessorChoice);
newConflictChoice = predecessorChoice;
newConflictExecution = predecessorExecution;
}
// Continue performing DFS if conflict is not found
updateBacktrackSetRecursive(predecessorExecution, predecessorChoice, newConflictExecution, newConflictChoice,
- currRWSet, visited);
+ newCurrRWSet, visited);
}
}