From 23babcd785d9093857dc118d8dd2d9e9ddf3d259 Mon Sep 17 00:00:00 2001 From: Raman Date: Tue, 2 May 2017 09:47:54 -0400 Subject: [PATCH] 2536: Review ChildFactory uses for long-running tasks Check the hashmap to ensure there isn't a node for the given key already, before creating the node. --- .../sleuthkit/autopsy/datamodel/HashsetHits.java | 9 +++++---- .../autopsy/datamodel/InterestingHits.java | 10 ++++++---- .../sleuthkit/autopsy/datamodel/KeywordHits.java | 14 ++++++++++---- .../timeline/explorernodes/EventRootNode.java | 12 ++++++++---- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java index db409d7ec9..d07a0c3ba3 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java @@ -379,10 +379,11 @@ public class HashsetHits implements AutopsyVisitableItem { hashsetResults.getArtifactIds(hashsetName).forEach((id) -> { try { - BlackboardArtifact art = skCase.getBlackboardArtifact(id); - - artifactHits.put(id, art); - list.add(id); + if (!artifactHits.containsKey(id)) { + BlackboardArtifact art = skCase.getBlackboardArtifact(id); + artifactHits.put(id, art); + list.add(id); + } } catch (TskException ex) { logger.log(Level.SEVERE, "TSK Exception occurred", ex); //NON-NLS } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java index e6a111a5d8..f089727da4 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java @@ -354,10 +354,12 @@ public class InterestingHits implements AutopsyVisitableItem { interestingResults.getArtifactIds(setName).forEach((id) -> { try { - BlackboardArtifact art = skCase.getBlackboardArtifact(id); - - artifactHits.put(id, art); - list.add(id); + if (!artifactHits.containsKey(id)) { + BlackboardArtifact art = skCase.getBlackboardArtifact(id); + + artifactHits.put(id, art); + list.add(id); + } } catch (TskCoreException ex) { logger.log(Level.SEVERE, "TSK Exception occurred", ex); //NON-NLS } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java index bdc4944afe..19fb871e1d 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java @@ -707,15 +707,19 @@ public class KeywordHits implements AutopsyVisitableItem { if ((instances.size() == 1) && (instances.get(0).equals(DEFAULT_INSTANCE_NAME))) { for (Long id : keywordResults.getArtifactIds(setName, keyword, DEFAULT_INSTANCE_NAME) ) { RegExpInstanceKey key = new RegExpInstanceKey(id); - nodesMap.put(key, createNode(key)); - list.add(key); + if (!nodesMap.containsKey(key)) { + nodesMap.put(key, createNode(key)); + list.add(key); + } } } else { for (String instance : instances) { RegExpInstanceKey key = new RegExpInstanceKey(instance); - nodesMap.put(key, createNode(key)); - list.add(key); + if (!nodesMap.containsKey(key)) { + nodesMap.put(key, createNode(key)); + list.add(key); + } } } @@ -898,9 +902,11 @@ public class KeywordHits implements AutopsyVisitableItem { @Override protected boolean createKeys(List list) { for (Long id : keywordResults.getArtifactIds(setName, keyword, instance) ) { + if (!nodesMap.containsKey(id)) { nodesMap.put(id, createBlackboardArtifactNode(id)); list.add(id); } + } return true; } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventRootNode.java b/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventRootNode.java index a2a00837c6..c699c6cac8 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventRootNode.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventRootNode.java @@ -100,12 +100,16 @@ public class EventRootNode extends DisplayableItemNode { */ if (eventIDs.size() < MAX_EVENTS_TO_DISPLAY) { for (Long eventId: eventIDs){ - nodesMap.put(eventId, createNode(eventId)); - toPopulate.add(eventId); + if (!nodesMap.containsKey(eventId)) { + nodesMap.put(eventId, createNode(eventId)); + toPopulate.add(eventId); + } } } else { - nodesMap.put(-1L, createNode(-1L)); - toPopulate.add(-1L); + if (!nodesMap.containsKey(-1L)) { + nodesMap.put(-1L, createNode(-1L)); + toPopulate.add(-1L); + } } return true; }