From 9ef9cb28aa5781cc3e1c80323a25628f54c39b9f Mon Sep 17 00:00:00 2001 From: jmillman Date: Mon, 11 Aug 2014 14:14:13 -0400 Subject: [PATCH] improve thread safety --- .../autopsy/imageanalyzer/ThreadConfined.java | 2 +- .../imageanalyzer/grouping/GroupManager.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ThreadConfined.java b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ThreadConfined.java index 2e33930be9..067272e291 100644 --- a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ThreadConfined.java +++ b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ThreadConfined.java @@ -17,6 +17,6 @@ public @interface ThreadConfined { public enum ThreadType { - ANY, UI, NOT_UI + ANY, UI, JFX, AWT, NOT_UI } } diff --git a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/grouping/GroupManager.java b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/grouping/GroupManager.java index 2881974873..8ce9e048d6 100644 --- a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/grouping/GroupManager.java +++ b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/grouping/GroupManager.java @@ -44,6 +44,8 @@ import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.imageanalyzer.EurekaController; import org.sleuthkit.autopsy.imageanalyzer.EurekaModule; import org.sleuthkit.autopsy.imageanalyzer.LoggedTask; +import org.sleuthkit.autopsy.imageanalyzer.ThreadConfined; +import org.sleuthkit.autopsy.imageanalyzer.ThreadConfined.ThreadType; import org.sleuthkit.autopsy.imageanalyzer.datamodel.Category; import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute; import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableDB; @@ -74,12 +76,15 @@ public class GroupManager { private final Map groupMap = new HashMap<>(); /** list of all analyzed groups */ + @ThreadConfined(type = ThreadType.JFX) private final ObservableList analyzedGroups = FXCollections.observableArrayList(); /** list of unseen groups */ + @ThreadConfined(type = ThreadType.JFX) private final ObservableList unSeenGroups = FXCollections.observableArrayList(); /** sorted list of unseen groups */ + @ThreadConfined(type = ThreadType.JFX) private final SortedList sortedUnSeenGroups = unSeenGroups.sorted(); private ReGroupTask groupByTask; @@ -100,6 +105,7 @@ public class GroupManager { return analyzedGroups; } + @ThreadConfined(type = ThreadType.JFX) public SortedList getUnSeenGroups() { return sortedUnSeenGroups; } @@ -542,14 +548,19 @@ public class GroupManager { if (groupByTask != null) { groupByTask.cancel(true); } - sortedUnSeenGroups.setComparator(sortBy.getGrpComparator(groupBy, sortOrder)); + Platform.runLater(() -> { + sortedUnSeenGroups.setComparator(sortBy.getGrpComparator(groupBy, sortOrder)); + }); + groupByTask = new ReGroupTask(groupBy, sortBy, sortOrder); controller.submitBGTask(groupByTask); } else { // just resort the list of groups setSortBy(sortBy); setSortOrder(sortOrder); - sortedUnSeenGroups.setComparator(sortBy.getGrpComparator(groupBy, sortOrder)); + Platform.runLater(() -> { + sortedUnSeenGroups.setComparator(sortBy.getGrpComparator(groupBy, sortOrder)); + }); } }