mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
Merge remote-tracking branch 'origin/GP-1750_Dan_dbTraceDeadlock' into patch
This commit is contained in:
commit
c6b5149d27
1 changed files with 40 additions and 28 deletions
|
@ -186,6 +186,7 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
|
|||
}
|
||||
|
||||
protected boolean isLower(long lower) {
|
||||
try (LockHold hold = trace.lockRead()) { // May not be necessary
|
||||
synchronized (ordered) {
|
||||
Range<Long> range = spanSet.rangeContaining(lower);
|
||||
if (range == null) {
|
||||
|
@ -194,6 +195,7 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
|
|||
return range.lowerEndpoint().longValue() == lower;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected static boolean addSnapRange(long lower, long upper, RangeSet<Long> spanSet,
|
||||
List<Range<Long>> ordered) {
|
||||
|
@ -262,13 +264,13 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
|
|||
List<Range<Long>> ordered = new ArrayList<>();
|
||||
try (LockHold hold = trace.lockRead()) {
|
||||
collectForkRanges(trace.getTimeManager(), snap, spanSet, ordered);
|
||||
}
|
||||
synchronized (this.ordered) {
|
||||
this.spanSet.clear();
|
||||
this.ordered.clear();
|
||||
this.spanSet.addAll(spanSet);
|
||||
this.ordered.addAll(ordered);
|
||||
}
|
||||
}
|
||||
assert !ordered.isEmpty();
|
||||
changeListeners.fire.run();
|
||||
}
|
||||
|
@ -322,26 +324,33 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
|
|||
|
||||
@Override
|
||||
public boolean isForked() {
|
||||
try (LockHold hold = trace.lockRead()) { // May not be necessary
|
||||
synchronized (ordered) {
|
||||
return ordered.size() > 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<Range<Long>> getOrderedSpans() {
|
||||
try (LockHold hold = trace.lockRead()) { // May not be necessary
|
||||
synchronized (ordered) {
|
||||
return List.copyOf(ordered);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<Range<Long>> getOrderedSpans(long snap) {
|
||||
try (LockHold hold = trace.lockRead()) { // setSnap requires this
|
||||
synchronized (ordered) {
|
||||
setSnap(snap);
|
||||
return getOrderedSpans();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getOrderedSnaps() {
|
||||
try (LockHold hold = trace.lockRead()) { // May not be necessary
|
||||
synchronized (ordered) {
|
||||
return ordered
|
||||
.stream()
|
||||
|
@ -349,9 +358,11 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
|
|||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getReversedSnaps() {
|
||||
try (LockHold hold = trace.lockRead()) { // May not be necessary
|
||||
synchronized (ordered) {
|
||||
return Lists.reverse(ordered)
|
||||
.stream()
|
||||
|
@ -359,6 +370,7 @@ public class DefaultTraceTimeViewport implements TraceTimeViewport {
|
|||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T getTop(Function<Long, T> func) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue