On 12/15/25 8:37 PM, Benjamin Peterson wrote:
On Mon, Dec 15, 2025, at 16:03, Patricio Chilano Mateo wrote:
Hi Benjamin,

This kind of deadlock, where a platform thread is blocked waiting to
acquire a monitor and the successor is an unmounted virtual thread that
cannot run, should be fixed by JDK-8369019.
Thanks for the pointer. So the idea is that "new" waiters on mutexes with 
unmounted virtual thread waiters wake up every so often to see if they can run?
Yes, for platform threads (carriers or not) we use timed-parking when there are unmounted vthreads ahead in the queue to avoid this kind of deadlock scenarios.

On 12/15/25 10:47 AM, Benjamin Peterson wrote:
On Mon, Dec 15, 2025, at 02:40, Alan Bateman wrote:
On 15/12/2025 05:41, Benjamin Peterson wrote:
Greetings,
I saw class initialization will be preemptible in many cases in JDK 26, which 
is exciting. I believe my application is hitting a deadlock due to virtual 
threads pinned in class loading on OpenJDK 25.0.1.

I captured a stack dump of the deadlocked application, and I can share the 
interesting parts of the dump. For background, there are 32 cores, so the 
virtual thread scheduler pool has 32 carrier threads.
The startup when using MR JARs is indeed complicated.
It looks to me like there's a potential problem anytime class loading can share 
an exclusive resource with a non-classloading path. (In this stack dump, the 
CleanerImpl list.)
Yes, class loading has a similar issue to class initialization since
native frames in the stack prevent threads to be unmounted.
Any plans in the works to remove those native frames or make them unwindable 
somehow?
Nothing planned yet but it’s something we may look into.

Patricio

Reply via email to