GP-0: Fix deadlock btw/ Trace & Platform Managers

This commit is contained in:
Dan 2022-11-04 15:44:37 -04:00
parent 1333ac6a0c
commit 52472d90a7

View file

@ -486,25 +486,25 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
return coordinates;
}
TracePlatform platform =
getPlatformForMapper(current.getTrace(), current.getObject(), mapper);
getPlatformForMapper(coordinates.getTrace(), coordinates.getObject(), mapper);
return coordinates.platform(platform);
}
protected DebuggerCoordinates doSetCurrent(DebuggerCoordinates newCurrent) {
newCurrent = newCurrent == null ? DebuggerCoordinates.NOWHERE : newCurrent;
newCurrent = fillInRecorder(newCurrent.getTrace(), newCurrent);
newCurrent = fillInPlatform(newCurrent);
synchronized (listenersByTrace) {
DebuggerCoordinates resolved = fillInRecorder(newCurrent.getTrace(), newCurrent);
if (current.equals(resolved)) {
if (current.equals(newCurrent)) {
return null;
}
resolved = fillInPlatform(resolved);
current = resolved;
current = newCurrent;
if (newCurrent.getTrace() != null) {
lastCoordsByTrace.put(newCurrent.getTrace(), newCurrent);
}
}
contextChanged();
if (resolved.getTrace() != null) {
lastCoordsByTrace.put(resolved.getTrace(), resolved);
}
return resolved;
}
return newCurrent;
}
protected void contextChanged() {
@ -610,10 +610,8 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
public void processEvent(PluginEvent event) {
super.processEvent(event);
if (event instanceof TraceActivatedPluginEvent ev) {
synchronized (listenersByTrace) {
doSetCurrent(ev.getActiveCoordinates());
}
}
else if (event instanceof TraceClosedPluginEvent ev) {
doTraceClosed(ev.getTrace());
}
@ -1048,10 +1046,16 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
boolean syncTargetFocus) {
DebuggerCoordinates prev;
DebuggerCoordinates resolved;
Trace newTrace = coordinates.getTrace();
synchronized (listenersByTrace) {
if (newTrace != null && !listenersByTrace.containsKey(newTrace)) {
throw new IllegalStateException(
"Trace must be opened before activated: " + newTrace);
}
}
prev = current;
resolved = doSetCurrent(coordinates);
}
if (resolved == null) {
return AsyncUtils.NIL;
}