On Wed, 31 Dec 2025 08:08:49 GMT, Alan Bateman <[email protected]> wrote:

> A regression since we changed the VirtualThread implementation to use use FJP 
> delayed task handling (JDK-8351927) in JDK 25.
> 
> If a virtual thread does a timed-park, followed immediately by an 
> untimed-park, while racing with both an async unpark and the execution of 
> cancelled timeout-task, then it is possible for the virtual thread to get 
> stuck in the parked state. More specifically, it is possible for stars to 
> align to create the scenario where parkTimeoutExpired makes available the 
> parking permit but it doesn't continue the thread because it has moved on to 
> an untimed-park.  A small oversight that crept in when the timeout support 
> was migrated to use the new delay scheduler.
> 
> Testing: tier1-5. New stress tests added, and existing stress test 
> TimedWaitALot updated.

src/java.base/share/classes/java/lang/VirtualThread.java line 920:

> 918:     private void parkTimeoutExpired() {
> 919:         assert !VirtualThread.currentThread().isVirtual();
> 920:         unpark(true);

@AlanBateman There's a slight semantic difference here now, where 
parkTimeoutExpired can now transition from both PARKED and TIMED_PARKED where 
before it could only transition from TIME_PARKED. Is this change intentional, 
and if not, it might be better to duplicate the logic in parkTimeoutExpired and 
unpark (but filtering on TIMED_PARKED and PARKED respectively).

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/29011#discussion_r2662139857

Reply via email to