class loading deadlock
Patricio Chilano Mateo
patricio.chilano.mateo at oracle.com
Tue Dec 16 19:07:17 UTC 2025
On 12/16/25 1:30 PM, Benjamin Peterson wrote:
> On Tue, Dec 16, 2025, at 09:25, Patricio Chilano Mateo wrote:
>> 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.
> It seems that would dislodge deadlock in the exact scenario I've run into. But what if the unmounted virtual thread is hanging onto other resources required by a waiting platform thread?
>
> For example, suppose the unmounted virtual thread had explicitly called ClassLoader.loadClass. Then, it could be holding a class loading lock or one of the JarFile/ZipEntry monitors while unmounted. If the platform thread required one of those mutexes, there would still be a deadlock even if the platform thread woke from its timed wait.
Yes, 8369019 only addresses the case where the successor is unmounted.
Fixing the case where the owner of the monitor is an unmounted virtual
thread that cannot run is more complex since we would need to detect the
deadlock and allow that particular virtual thread to run.
Patricio
More information about the loom-dev
mailing list