Make LifecycleTracer thread-safe

The real world may expose the buffers to concurrent accesses even when this is not supposed to be supported.
This commit is contained in:
Chris Vest 2021-03-09 11:57:49 +01:00
parent 2f9aabc915
commit f460c732d0

View File

@ -83,10 +83,12 @@ abstract class LifecycleTracer {
} }
void addTrace(Trace trace) { void addTrace(Trace trace) {
if (traces.size() == MAX_TRACE_POINTS) { synchronized (traces) {
traces.pollFirst(); if (traces.size() == MAX_TRACE_POINTS) {
traces.pollFirst();
}
traces.addLast(trace);
} }
traces.addLast(trace);
} }
@Override @Override
@ -118,9 +120,11 @@ abstract class LifecycleTracer {
@Override @Override
<E extends Throwable> E attachTrace(E throwable) { <E extends Throwable> E attachTrace(E throwable) {
long timestamp = System.nanoTime(); synchronized (traces) {
for (Trace trace : traces) { long timestamp = System.nanoTime();
trace.attach(throwable, timestamp); for (Trace trace : traces) {
trace.attach(throwable, timestamp);
}
} }
return throwable; return throwable;
} }