Slight changes for safeguard.
[jpf-core.git] / src / main / gov / nasa / jpf / listener / StateReducer.java
index 93043fa33d7b9a09491bdb3ac33df09f44e014d3..e67ee1344385da875aef611ad1e49cfc2436b8d7 100644 (file)
@@ -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<Integer[]> 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<Integer[]> 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;