in junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutInvocation.java [40:66]
public T proceed() throws Throwable {
InterruptTask interruptTask = new InterruptTask(Thread.currentThread());
ScheduledFuture<?> future = executor.schedule(interruptTask, timeout.getValue(), timeout.getUnit());
Throwable failure = null;
T result = null;
try {
result = delegate.proceed();
}
catch (Throwable t) {
UnrecoverableExceptions.rethrowIfUnrecoverable(t);
failure = t;
}
finally {
boolean cancelled = future.cancel(false);
if (!cancelled) {
future.get();
}
if (interruptTask.executed) {
Thread.interrupted();
failure = createTimeoutException(failure);
}
}
if (failure != null) {
throw failure;
}
return result;
}