From: amiraj Date: Wed, 4 Dec 2019 02:11:52 +0000 (-0800) Subject: Change in conflict tracker! X-Git-Url: http://plrg.eecs.uci.edu/git/?p=jpf-core.git;a=commitdiff_plain;h=6a0130156602669e2f61bc2ebe4dd6918b2f21b3 Change in conflict tracker! --- diff --git a/src/main/gov/nasa/jpf/listener/ConflictTracker.java b/src/main/gov/nasa/jpf/listener/ConflictTracker.java index 06e6e4a..b28d65b 100644 --- a/src/main/gov/nasa/jpf/listener/ConflictTracker.java +++ b/src/main/gov/nasa/jpf/listener/ConflictTracker.java @@ -209,35 +209,46 @@ public class ConflictTracker extends ListenerAdapter { } boolean updateTheOutSet(Node parentNode, Node currentNode) { - HashMap> setSet = parentNode.getOutgoingEdges().get(currentNode).getSetSetMap(); + HashMap> setSets = parentNode.getOutgoingEdges().get(currentNode).getSetSetMap(); HashSet updatedVarNames = new HashSet(); Edge currentEdge = parentNode.getOutgoingEdges().get(currentNode); HashMap lastWriter = currentEdge.getLastWriter(); HashMap lastValue = currentEdge.getLastValue(); + HashMap outSetVarMap = new HashMap(); boolean isChanged = false; - for (Map.Entry mapElement : setSet.entrySet()) { - ArrayList value = (ArrayList)mapElement.getValue(); + for (Map.Entry mapElement : setSets.entrySet()) { + ArrayList setSet = (ArrayList)mapElement.getValue(); - for (int i = 0;i < value.size();i++) { - updatedVarNames.add(value.get(i).getVarName()); + for (int i = 0;i < setSet.size();i++) { + updatedVarNames.add(setSet.get(i).getVarName()); } } for (NameValuePair i : parentNode.getOutSet()) { + outSetVarMap.put(i.getVarName(), i.getAppNum()); if (!updatedVarNames.contains(i.getVarName())) isChanged |= currentNode.getOutSet().add(i); } - for (Map.Entry mapElement : setSet.entrySet()) { - ArrayList value = (ArrayList)mapElement.getValue(); + for (Map.Entry mapElement : setSets.entrySet()) { + ArrayList setSet = (ArrayList)mapElement.getValue(); - for (int i = 0;i < value.size();i++) { - if (value.get(i).getAppNum().equals(lastWriter.get(value.get(i).getVarName())) - && value.get(i).getValue().equals(lastValue.get(value.get(i).getVarName()))) { - isChanged |= currentNode.getOutSet().add(value.get(i)); + for (int i = 0;i < setSet.size();i++) { + String varName = setSet.get(i).getVarName(); + Integer writer = lastWriter.get(varName); + String value = lastValue.get(varName); + + if (setSet.get(i).getAppNum().equals(writer) + && setSet.get(i).getValue().equals(value)) { + if (outSetVarMap.containsKey(varName)) { + Integer hashCode = outSetVarMap.get(varName).hashCode() * 31 + + varName.hashCode(); + currentNode.getOutSet().remove(hashCode); + } + isChanged |= currentNode.getOutSet().add(setSet.get(i)); } } }