mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 02:39:44 +02:00
GP-4098: Fix NPE announcing TraceRecorderTarget removal
This commit is contained in:
parent
1ebcfd58bc
commit
d6aad2bbff
1 changed files with 21 additions and 7 deletions
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue