Integrated: 8373120: Virtual thread stuck in BLOCKED state

Patricio Chilano Mateo pchilanomate at openjdk.org
Thu Jan 22 14:59:40 UTC 2026


On Thu, 15 Jan 2026 17:42:33 GMT, Patricio Chilano Mateo <pchilanomate at openjdk.org> wrote:

> Please review the following patch. This fixes a bug in how we handle state changes for the timed `Object.wait` case in `afterYield`, which can leave a virtual thread stuck in the `BLOCKED` state. It can be triggered by two consecutive calls to timed `Object.wait`, if the first call receives a notification and the second call relies on the timeout task to wake up the thread. I added the full sequence of events that leads to the vthread getting stuck in JBS.
> 
> The fix is to check for `notified` and attempt to change the state to `BLOCKED` inside the synchronized block. This guarantees that we don't change the state of an already new timed `Object.wait` call.
> 
> The PR includes a new test which reproduces the issue when run several times in mach5. It's a hybrid of my original repro test and another one created by @AlanBateman.
> 
> Thanks,
> Patricio

This pull request has now been integrated.

Changeset: 26aab3cc
Author:    Patricio Chilano Mateo <pchilanomate at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/26aab3cccdbcf98c329c8d67093eb2dbf4b164e5
Stats:     156 lines in 2 files changed: 145 ins; 8 del; 3 mod

8373120: Virtual thread stuck in BLOCKED state

Co-authored-by: Alan Bateman <alanb at openjdk.org>
Reviewed-by: alanb

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

PR: https://git.openjdk.org/jdk/pull/29255


More information about the core-libs-dev mailing list