RFR: 8226228: Make Threads_lock an always safepoint checked lock.

David Holmes david.holmes at oracle.com
Fri Sep 6 12:30:46 UTC 2019


https://bugs.openjdk.java.net/browse/JDK-8229778

David

On 6/09/2019 10:26 pm, David Holmes wrote:
> Not Robbin but ...
> 
> On 6/09/2019 8:57 pm, Doerr, Martin wrote:
>> Hi Robbin,
>>
>> we have seen the test vmTestbase/nsk/jdb/watch/watch001/watch001.java 
>> running into fatal() in Thread::check_for_valid_safepoint_state:
>>    if (((JavaThread*)this)->thread_state() != _thread_in_vm) {
>>      fatal("LEAF method calling lock?");
>>    }
>>
>> With the following stack:
>> Thread::check_for_valid_safepoint_state(bool)
>> Mutex::lock(Thread*)
>> Mutex::lock()
>> JavaThread::block_if_vm_exited()
>> SafepointSynchronize::block(JavaThread*)
>> SafepointMechanism::block_if_requested_slow(JavaThread*)
>> JavaThread::check_special_condition_for_native_trans(JavaThread*)
>>
>> Thread:
>> =>0x000000011590c800 JavaThread "output reader" 
>> [_thread_in_native_trans, id=5918, 
>> stack(0x00000001180a0000,0x00000001182ad888)]
>>
>> Last Event:
>> Event: 8.870 Executing VM operation: Exit
>>
>> Sounds like this is related to this change. Do you agree?
> 
> yes this failure is caused by the change to make the Threads_lock a 
> safepoint-always lock. The lock() in block_if_vm_exited() does not need 
> to check for a safepoint as it simply wants to block the thread 
> permanently on the locked Threads_lock. But before we get that far we 
> now check the safepoint state and so hit the assertion.
> 
> We've had a report of this in the bug system but there was no stack and 
> no reproducer.
> 
> Thanks,
> David
> -----
> 
>> Best regards,
>> Martin
>>


More information about the hotspot-runtime-dev mailing list