GP-4098: Fix NPE announcing TraceRecorderTarget removal

This commit is contained in:
Dan 2023-12-04 14:41:18 -05:00
parent 1ebcfd58bc
commit d6aad2bbff

View file

@ -72,10 +72,18 @@ import ghidra.util.datastruct.ListenerSet;
import ghidra.util.exception.CancelledException; import ghidra.util.exception.CancelledException;
import ghidra.util.task.TaskMonitor; import ghidra.util.task.TaskMonitor;
@PluginInfo(shortDescription = "Debugger models manager service (proxy to front-end)", description = "Manage debug sessions, connections, and trace recording", category = PluginCategoryNames.DEBUGGER, packageName = DebuggerPluginPackage.NAME, status = PluginStatus.RELEASED, eventsConsumed = { @PluginInfo(
ProgramActivatedPluginEvent.class, ProgramClosedPluginEvent.class, }, servicesRequired = { shortDescription = "Debugger models manager service (proxy to front-end)",
description = "Manage debug sessions, connections, and trace recording",
category = PluginCategoryNames.DEBUGGER,
packageName = DebuggerPluginPackage.NAME,
status = PluginStatus.RELEASED,
eventsConsumed = {
ProgramActivatedPluginEvent.class, ProgramClosedPluginEvent.class, },
servicesRequired = {
DebuggerTargetService.class, DebuggerTargetService.class,
DebuggerTraceManagerService.class, }, servicesProvided = { DebuggerModelService.class, }) DebuggerTraceManagerService.class, },
servicesProvided = { DebuggerModelService.class, })
public class DebuggerModelServiceProxyPlugin extends Plugin public class DebuggerModelServiceProxyPlugin extends Plugin
implements DebuggerModelServiceInternal { implements DebuggerModelServiceInternal {
@ -188,9 +196,11 @@ public class DebuggerModelServiceProxyPlugin extends Plugin
@Override @Override
public void elementAdded(TraceRecorder element) { public void elementAdded(TraceRecorder element) {
recorderListeners.invoke().elementAdded(element); recorderListeners.invoke().elementAdded(element);
Swing.runIfSwingOrRunLater(() -> { Swing.runLater(() -> {
TraceRecorderTarget target = new TraceRecorderTarget(tool, element); TraceRecorderTarget target = new TraceRecorderTarget(tool, element);
targets.put(element, target); if (targets.put(element, target) == target) {
return;
}
targetService.publishTarget(target); targetService.publishTarget(target);
}); });
} }
@ -198,8 +208,12 @@ public class DebuggerModelServiceProxyPlugin extends Plugin
@Override @Override
public void elementRemoved(TraceRecorder element) { public void elementRemoved(TraceRecorder element) {
recorderListeners.invoke().elementRemoved(element); recorderListeners.invoke().elementRemoved(element);
Swing.runIfSwingOrRunLater(() -> { Swing.runLater(() -> {
targetService.withdrawTarget(Objects.requireNonNull(targets.get(element))); TraceRecorderTarget target = targets.remove(element);
if (target == null) {
return;
}
targetService.withdrawTarget(target);
}); });
} }