diff --git a/src/java.base/share/classes/java/lang/VirtualThread.java b/src/java.base/share/classes/java/lang/VirtualThread.java index e0b74db23d97a..9eb788a32dafe 100644 --- a/src/java.base/share/classes/java/lang/VirtualThread.java +++ b/src/java.base/share/classes/java/lang/VirtualThread.java @@ -215,13 +215,12 @@ private static Runnable wrap(VirtualThread vthread, Runnable task) { @Hidden @JvmtiMountTransition public void run() { - // notify JVMTI - vthread.notifyJvmtiStart(); - - vthread.run(task); - - // notify JVMTI - vthread.notifyJvmtiEnd(); + vthread.notifyJvmtiStart(); // notify JVMTI + try { + vthread.run(task); + } finally { + vthread.notifyJvmtiEnd(); // notify JVMTI + } } }; } @@ -409,18 +408,14 @@ private void run(Runnable task) { } catch (Throwable exc) { dispatchUncaughtException(exc); } finally { - try { - // pop any remaining scopes from the stack, this may block - StackableScope.popAll(); - - // emit JFR event if enabled - if (VirtualThreadEndEvent.isTurnedOn()) { - var event = new VirtualThreadEndEvent(); - event.javaThreadId = threadId(); - event.commit(); - } + // pop any remaining scopes from the stack, this may block + StackableScope.popAll(); - } finally { + // emit JFR event if enabled + if (VirtualThreadEndEvent.isTurnedOn()) { + var event = new VirtualThreadEndEvent(); + event.javaThreadId = threadId(); + event.commit(); } } } diff --git a/src/java.base/share/classes/jdk/internal/vm/annotation/JvmtiMountTransition.java b/src/java.base/share/classes/jdk/internal/vm/annotation/JvmtiMountTransition.java index df0545e46b135..f4e18041f2dc1 100644 --- a/src/java.base/share/classes/jdk/internal/vm/annotation/JvmtiMountTransition.java +++ b/src/java.base/share/classes/jdk/internal/vm/annotation/JvmtiMountTransition.java @@ -32,7 +32,7 @@ * or ends virtual thread mount state transition (VTMS transition). * * @implNote - * This annotation is only used for VirtualThread methods. + * This annotation is only used for some VirtualThread and Continuation methods. */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME)