From ee1b1f8df5b86c9fe9ccd5dc79fc31e773852b2f Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Thu, 9 Mar 2023 17:49:12 -0500 Subject: [PATCH] Fixed ConcurrentModificationException when using snapshots in the Byte Viewer. --- .../listingpanel/DualListingNavigator.java | 17 ++++++----------- .../ProgramByteViewerComponentProvider.java | 6 +++--- .../vt/gui/duallisting/VTListingNavigator.java | 17 ++++++----------- 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingNavigator.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingNavigator.java index c801e9697d..9344790b52 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingNavigator.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingNavigator.java @@ -15,9 +15,6 @@ */ package ghidra.app.util.viewer.listingpanel; -import java.util.ArrayList; -import java.util.List; - import javax.swing.Icon; import ghidra.app.nav.*; @@ -34,8 +31,6 @@ import ghidra.util.UniversalIdGenerator; class DualListingNavigator implements Navigatable { private final ListingPanel listingPanel; - private List listeners = - new ArrayList<>(); private long id; private GoToService goToService; @@ -55,7 +50,12 @@ class DualListingNavigator implements Navigatable { @Override public void addNavigatableListener(NavigatableRemovalListener listener) { - listeners.add(listener); + // not used + } + + @Override + public void removeNavigatableListener(NavigatableRemovalListener listener) { + // not used } @Override @@ -126,11 +126,6 @@ class DualListingNavigator implements Navigatable { return true; } - @Override - public void removeNavigatableListener(NavigatableRemovalListener listener) { - listeners.remove(listener); - } - @Override public void requestFocus() { listingPanel.requestFocus(); diff --git a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java index 07472855e9..9f1a1212d2 100644 --- a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java +++ b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java @@ -52,7 +52,7 @@ public class ProgramByteViewerComponentProvider extends ByteViewerComponentProvi protected DecoratorPanel decorationComponent; private WeakSet navigationListeners = - WeakDataStructureFactory.createSingleThreadAccessWeakSet(); + WeakDataStructureFactory.createCopyOnWriteWeakSet(); private CloneByteViewerAction cloneByteViewerAction; @@ -564,9 +564,9 @@ public class ProgramByteViewerComponentProvider extends ByteViewerComponentProvi } } - protected ByteBlockChangeManager newByteBlockChangeManager(ProgramByteBlockSet blockSet, + protected ByteBlockChangeManager newByteBlockChangeManager(ProgramByteBlockSet blocks, ByteBlockChangeManager bbcm) { - return new ByteBlockChangeManager(blockSet, bbcm); + return new ByteBlockChangeManager(blocks, bbcm); } protected ProgramByteBlockSet newByteBlockSet(ByteBlockChangeManager changeManager) { diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingNavigator.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingNavigator.java index df7311b0e7..efc0d46be0 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingNavigator.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingNavigator.java @@ -15,9 +15,6 @@ */ package ghidra.feature.vt.gui.duallisting; -import java.util.ArrayList; -import java.util.List; - import javax.swing.Icon; import ghidra.app.nav.*; @@ -33,8 +30,6 @@ public class VTListingNavigator implements Navigatable { private final ListingCodeComparisonPanel dualListingPanel; private final ListingPanel listingPanel; - private List listeners = - new ArrayList<>(); private long id; public VTListingNavigator(ListingCodeComparisonPanel dualListingPanel, @@ -47,7 +42,12 @@ public class VTListingNavigator implements Navigatable { @Override public void addNavigatableListener(NavigatableRemovalListener listener) { - listeners.add(listener); + // not used + } + + @Override + public void removeNavigatableListener(NavigatableRemovalListener listener) { + // not used } @Override @@ -121,11 +121,6 @@ public class VTListingNavigator implements Navigatable { return true; } - @Override - public void removeNavigatableListener(NavigatableRemovalListener listener) { - listeners.remove(listener); - } - @Override public void requestFocus() { listingPanel.requestFocus();