Merge remote-tracking branch 'origin/patch'

This commit is contained in:
Ryan Kurtz 2022-03-22 12:42:15 -04:00
commit fee687739b
4 changed files with 47 additions and 31 deletions

View file

@ -161,6 +161,9 @@ public class DebuggerModelServiceProxyPlugin extends Plugin
@Override @Override
public void elementAdded(DebuggerObjectModel element) { public void elementAdded(DebuggerObjectModel element) {
modelListeners.fire.elementAdded(element); modelListeners.fire.elementAdded(element);
if (currentModel == null) {
activateModel(element);
}
} }
@Override @Override

View file

@ -189,6 +189,7 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
} }
protected boolean isLower(long lower) { protected boolean isLower(long lower) {
try (LockHold hold = trace.lockRead()) { // May not be necessary
synchronized (ordered) { synchronized (ordered) {
Range<Long> range = spanSet.rangeContaining(lower); Range<Long> range = spanSet.rangeContaining(lower);
if (range == null) { if (range == null) {
@ -197,6 +198,7 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
return range.lowerEndpoint().longValue() == lower; return range.lowerEndpoint().longValue() == lower;
} }
} }
}
protected static boolean addSnapRange(long lower, long upper, RangeSet<Long> spanSet, protected static boolean addSnapRange(long lower, long upper, RangeSet<Long> spanSet,
List<Range<Long>> ordered) { List<Range<Long>> ordered) {
@ -265,13 +267,13 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
List<Range<Long>> ordered = new ArrayList<>(); List<Range<Long>> ordered = new ArrayList<>();
try (LockHold hold = trace.lockRead()) { try (LockHold hold = trace.lockRead()) {
collectForkRanges(trace.getTimeManager(), snap, spanSet, ordered); collectForkRanges(trace.getTimeManager(), snap, spanSet, ordered);
}
synchronized (this.ordered) { synchronized (this.ordered) {
this.spanSet.clear(); this.spanSet.clear();
this.ordered.clear(); this.ordered.clear();
this.spanSet.addAll(spanSet); this.spanSet.addAll(spanSet);
this.ordered.addAll(ordered); this.ordered.addAll(ordered);
} }
}
assert !ordered.isEmpty(); assert !ordered.isEmpty();
changeListeners.fire.run(); changeListeners.fire.run();
} }
@ -325,26 +327,33 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
@Override @Override
public boolean isForked() { public boolean isForked() {
try (LockHold hold = trace.lockRead()) { // May not be necessary
synchronized (ordered) { synchronized (ordered) {
return ordered.size() > 1; return ordered.size() > 1;
} }
} }
}
public List<Range<Long>> getOrderedSpans() { public List<Range<Long>> getOrderedSpans() {
try (LockHold hold = trace.lockRead()) { // May not be necessary
synchronized (ordered) { synchronized (ordered) {
return List.copyOf(ordered); return List.copyOf(ordered);
} }
} }
}
public List<Range<Long>> getOrderedSpans(long snap) { public List<Range<Long>> getOrderedSpans(long snap) {
try (LockHold hold = trace.lockRead()) { // setSnap requires this
synchronized (ordered) { synchronized (ordered) {
setSnap(snap); setSnap(snap);
return getOrderedSpans(); return getOrderedSpans();
} }
} }
}
@Override @Override
public List<Long> getOrderedSnaps() { public List<Long> getOrderedSnaps() {
try (LockHold hold = trace.lockRead()) { // May not be necessary
synchronized (ordered) { synchronized (ordered) {
return ordered return ordered
.stream() .stream()
@ -352,9 +361,11 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
} }
}
@Override @Override
public List<Long> getReversedSnaps() { public List<Long> getReversedSnaps() {
try (LockHold hold = trace.lockRead()) { // May not be necessary
synchronized (ordered) { synchronized (ordered) {
return Lists.reverse(ordered) return Lists.reverse(ordered)
.stream() .stream()
@ -362,6 +373,7 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
} }
}
@Override @Override
public <T> T getTop(Function<Long, T> func) { public <T> T getTop(Function<Long, T> func) {

View file

@ -39,7 +39,8 @@ import ghidra.framework.Application;
import ghidra.framework.options.SaveState; import ghidra.framework.options.SaveState;
import ghidra.framework.plugintool.PluginTool; import ghidra.framework.plugintool.PluginTool;
import ghidra.util.Msg; import ghidra.util.Msg;
import ghidra.util.task.*; import ghidra.util.task.TaskLauncher;
import ghidra.util.task.TaskMonitor;
/** /**
* Hosts the embedded OSGi framework and manages {@link GhidraBundle}s. * Hosts the embedded OSGi framework and manages {@link GhidraBundle}s.
@ -261,7 +262,7 @@ public class BundleHost {
} }
Bundle installFromPath(Path p) throws GhidraBundleException { Bundle installFromPath(Path p) throws GhidraBundleException {
return installFromLoc("file://" + p.toAbsolutePath().normalize().toString()); return installFromLoc(p.toUri().toString());
} }
/** /**

View file

@ -48,7 +48,7 @@ public class GhidraJarBundle extends GhidraBundle {
public GhidraJarBundle(BundleHost bundleHost, ResourceFile file, boolean enabled, public GhidraJarBundle(BundleHost bundleHost, ResourceFile file, boolean enabled,
boolean systemBundle) { boolean systemBundle) {
super(bundleHost, file, enabled, systemBundle); super(bundleHost, file, enabled, systemBundle);
this.bundleLocation = "file://" + file.getAbsolutePath().toString(); this.bundleLocation = file.toURI().toString();
} }
@Override @Override