RFR: 8373120: Virtual thread stuck in BLOCKED state [v2]

Patricio Chilano Mateo pchilanomate at openjdk.org
Fri Jan 16 17:07:34 UTC 2026


> 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

Patricio Chilano Mateo has updated the pull request incrementally with one additional commit since the last revision:

  add comment in test

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/29255/files
  - new: https://git.openjdk.org/jdk/pull/29255/files/39d7ac79..b69a40f1

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=29255&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=29255&range=00-01

  Stats: 2 lines in 1 file changed: 2 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/29255.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29255/head:pull/29255

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


More information about the core-libs-dev mailing list