From: rtrimana Date: Fri, 22 Jan 2021 00:06:22 +0000 (-0800) Subject: Bug fix: need to check for conflicts between events extracted from the state summary... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c3dddbf13bb97e250db9d092cef9787d321fe8f0;p=jpf-core.git Bug fix: need to check for conflicts between events extracted from the state summary and the current transition in updateBacktrackSetsFromGraph. --- diff --git a/src/main/gov/nasa/jpf/listener/DPORStateReducerWithSummary.java b/src/main/gov/nasa/jpf/listener/DPORStateReducerWithSummary.java index 2bc18a9..a750c4d 100755 --- a/src/main/gov/nasa/jpf/listener/DPORStateReducerWithSummary.java +++ b/src/main/gov/nasa/jpf/listener/DPORStateReducerWithSummary.java @@ -1338,11 +1338,19 @@ public class DPORStateReducerWithSummary extends ListenerAdapter { Set eventChoicesAtStateId = mainSummary.getEventChoicesAtStateId(stateId); for (Integer eventChoice : eventChoicesAtStateId) { // Get the ReadWriteSet object for this event at state ID - ReadWriteSet rwSet = mainSummary.getRWSetForEventChoiceAtState(eventChoice, stateId); + ReadWriteSet rwSet = mainSummary.getRWSetForEventChoiceAtState(eventChoice, stateId).getCopy(); + // We have to first check for conflicts between the event and the current transition + // Push up one happens-before transition + int conflictEventChoice = eventChoice; + if (isConflictFound(eventChoice, currExecution, currChoice, rwSet)) { + createBacktrackingPoint(eventChoice, currExecution, currChoice); + // We need to extract the pushed happens-before event choice from the predecessor execution and choice + conflictEventChoice = currExecution.getExecutionTrace().get(currChoice).getChoice(); + } // Memorize visited TransitionEvent object while performing backward DFS to avoid getting caught up in a cycle HashSet visited = new HashSet<>(); // Update the backtrack sets recursively - updateBacktrackSetDFS(currExecution, currChoice, eventChoice, rwSet.getCopy(), visited); + updateBacktrackSetDFS(currExecution, currChoice, conflictEventChoice, rwSet, visited); } } }