From f3b3ecaa41002d6d79fcf8d26b3546be60d9d9b9 Mon Sep 17 00:00:00 2001 From: rtrimana Date: Fri, 14 Feb 2020 16:11:23 -0800 Subject: [PATCH] Slight changes for safeguard. --- .../gov/nasa/jpf/listener/StateReducer.java | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/gov/nasa/jpf/listener/StateReducer.java b/src/main/gov/nasa/jpf/listener/StateReducer.java index 93043fa..e67ee13 100644 --- a/src/main/gov/nasa/jpf/listener/StateReducer.java +++ b/src/main/gov/nasa/jpf/listener/StateReducer.java @@ -107,6 +107,11 @@ public class StateReducer extends ListenerAdapter { visitedStateSet = new HashSet<>(); stateId = -1; prevChoiceValue = -1; + cgMap = new HashMap<>(); + readWriteFieldsMap = new HashMap<>(); + backtrackMap = new HashMap<>(); + backtrackSet = new HashSet<>(); + conflictPairMap = new HashMap<>(); initializeStateReduction(); } @@ -119,11 +124,11 @@ public class StateReducer extends ListenerAdapter { maxUpperBound = 0; isInitialized = false; isResetAfterAnalysis = false; - cgMap = new HashMap<>(); - readWriteFieldsMap = new HashMap<>(); - backtrackMap = new HashMap<>(); - backtrackSet = new HashSet<>(); - conflictPairMap = new HashMap<>(); + cgMap.clear(); + readWriteFieldsMap.clear(); + backtrackMap.clear(); + backtrackSet.clear(); + conflictPairMap.clear(); } } @@ -242,16 +247,18 @@ public class StateReducer extends ListenerAdapter { choiceCounter++; // Do this for every CG after finishing each backtrack list if (icsCG.getNextChoice() == -1 || visitedStateSet.contains(stateId)) { - int event = cgMap.get(icsCG); - LinkedList choiceLists = backtrackMap.get(event); - if (choiceLists != null && choiceLists.peekFirst() != null) { - Integer[] choiceList = choiceLists.removeFirst(); - // Deploy the new choice list for this CG - icsCG.setNewValues(choiceList); - icsCG.reset(); - } else { - // Set done if this was the last backtrack list - icsCG.setDone(); + if (cgMap.containsKey(icsCG)) { + int event = cgMap.get(icsCG); + LinkedList choiceLists = backtrackMap.get(event); + if (choiceLists != null && choiceLists.peekFirst() != null) { + Integer[] choiceList = choiceLists.removeFirst(); + // Deploy the new choice list for this CG + icsCG.setNewValues(choiceList); + icsCG.reset(); + } else { + // Set done if this was the last backtrack list + icsCG.setDone(); + } } } } @@ -481,7 +488,7 @@ public class StateReducer extends ListenerAdapter { // The start index for the recursion is always 1 (from the main branch) } else { // This is a sub-graph // There is a case/bug that after a re-initialization, currCG is not yet initialized - if (currCG != null) { + if (currCG != null && cgMap.containsKey(currCG)) { int backtrackListIndex = cgMap.get(currCG); backtrackChoiceLists = backtrackMap.get(backtrackListIndex); int listLength = choices.length; -- 2.34.1