mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
GP-0: Fix deadlock btw/ Trace & Platform Managers
This commit is contained in:
parent
1333ac6a0c
commit
52472d90a7
1 changed files with 18 additions and 14 deletions
|
@ -486,25 +486,25 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
|
||||||
return coordinates;
|
return coordinates;
|
||||||
}
|
}
|
||||||
TracePlatform platform =
|
TracePlatform platform =
|
||||||
getPlatformForMapper(current.getTrace(), current.getObject(), mapper);
|
getPlatformForMapper(coordinates.getTrace(), coordinates.getObject(), mapper);
|
||||||
return coordinates.platform(platform);
|
return coordinates.platform(platform);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DebuggerCoordinates doSetCurrent(DebuggerCoordinates newCurrent) {
|
protected DebuggerCoordinates doSetCurrent(DebuggerCoordinates newCurrent) {
|
||||||
newCurrent = newCurrent == null ? DebuggerCoordinates.NOWHERE : newCurrent;
|
newCurrent = newCurrent == null ? DebuggerCoordinates.NOWHERE : newCurrent;
|
||||||
|
newCurrent = fillInRecorder(newCurrent.getTrace(), newCurrent);
|
||||||
|
newCurrent = fillInPlatform(newCurrent);
|
||||||
synchronized (listenersByTrace) {
|
synchronized (listenersByTrace) {
|
||||||
DebuggerCoordinates resolved = fillInRecorder(newCurrent.getTrace(), newCurrent);
|
if (current.equals(newCurrent)) {
|
||||||
if (current.equals(resolved)) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
resolved = fillInPlatform(resolved);
|
current = newCurrent;
|
||||||
current = resolved;
|
if (newCurrent.getTrace() != null) {
|
||||||
contextChanged();
|
lastCoordsByTrace.put(newCurrent.getTrace(), newCurrent);
|
||||||
if (resolved.getTrace() != null) {
|
|
||||||
lastCoordsByTrace.put(resolved.getTrace(), resolved);
|
|
||||||
}
|
}
|
||||||
return resolved;
|
|
||||||
}
|
}
|
||||||
|
contextChanged();
|
||||||
|
return newCurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void contextChanged() {
|
protected void contextChanged() {
|
||||||
|
@ -610,9 +610,7 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
|
||||||
public void processEvent(PluginEvent event) {
|
public void processEvent(PluginEvent event) {
|
||||||
super.processEvent(event);
|
super.processEvent(event);
|
||||||
if (event instanceof TraceActivatedPluginEvent ev) {
|
if (event instanceof TraceActivatedPluginEvent ev) {
|
||||||
synchronized (listenersByTrace) {
|
doSetCurrent(ev.getActiveCoordinates());
|
||||||
doSetCurrent(ev.getActiveCoordinates());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (event instanceof TraceClosedPluginEvent ev) {
|
else if (event instanceof TraceClosedPluginEvent ev) {
|
||||||
doTraceClosed(ev.getTrace());
|
doTraceClosed(ev.getTrace());
|
||||||
|
@ -1048,10 +1046,16 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
|
||||||
boolean syncTargetFocus) {
|
boolean syncTargetFocus) {
|
||||||
DebuggerCoordinates prev;
|
DebuggerCoordinates prev;
|
||||||
DebuggerCoordinates resolved;
|
DebuggerCoordinates resolved;
|
||||||
|
|
||||||
|
Trace newTrace = coordinates.getTrace();
|
||||||
synchronized (listenersByTrace) {
|
synchronized (listenersByTrace) {
|
||||||
prev = current;
|
if (newTrace != null && !listenersByTrace.containsKey(newTrace)) {
|
||||||
resolved = doSetCurrent(coordinates);
|
throw new IllegalStateException(
|
||||||
|
"Trace must be opened before activated: " + newTrace);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
prev = current;
|
||||||
|
resolved = doSetCurrent(coordinates);
|
||||||
if (resolved == null) {
|
if (resolved == null) {
|
||||||
return AsyncUtils.NIL;
|
return AsyncUtils.NIL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue