RFR (XS) 8237080: fatal error: VM thread could block on lock that may be held by a JavaThread during safepoint: SharedDecoder_lock
Patricio Chilano
patricio.chilano.mateo at oracle.com
Wed Jan 29 22:53:16 UTC 2020
Hi Coleen,
On 1/29/20 7:00 PM, coleen.phillimore at oracle.com wrote:
>
>
> On 1/29/20 1:32 PM, coleen.phillimore at oracle.com wrote:
>>
>>
>> On 1/29/20 12:07 PM, Patricio Chilano wrote:
>>> Hi Coleen,
>>>
>>> Looks good to me. Not for this change but seems all monitors that
>>> are _safepoint_check_never should have allow_vm_block to true since
>>> they will not be held during a safepoint. Based on the output
>>> message in check_block_state() that's what we are trying to avoid.
>>> Also we wouldn't be incrementing _no_safepoint_count in
>>> no_safepoint_verifier() otherwise, which I think is what we want if
>>> the monitor has the _safepoint_check_never flag.
>>
>> I was wondering if someone would ask this question. Yes, you're
>> right. I had a bigger change at one point that verified that
>> _safepoint_check_never flags always implied _allow_vm_block to be
>> true, but backed off in the interest of a less invasive change. There
>> were a few mismatched locks.
>>
>> I'll try the larger change, which does have the effect of
>> _safepoint_check_never always implying NoSafepointVerifier, which was
>> my intention in the previous cleanups.
>
> Unfortunately, there are locks that are _safepoint_check_never where
> _allow_vm_block = false. These locks _may_ want to assert that the
> VMthread never calls them. The ZGC threads take locks with these values.
>
> There are locks that are _safepoint_check_always where _allow_vm_block
> = true. These locks are also taken by the VM thread. The
> NoSafepointVerifier in the code for _allow_vm_block protect these
> locks from deadlocking by preventing safepoints while they are held.
>
> As you pointed out, we only make a NoSafepointVerifier for locks that
> are _allow_vm_block = true, which covers many but not all of the
> _safepoint_check_never locks. If I make it also check
> _safepoint_check_never, there's a JFR lock that very specifically
> violates this with comments.
>
> I am going to stay with my first change for this bug fix.
Ok, we can look at that later then. Thanks for investigating and testing
that too.
Patricio
> Thanks,
> Coleen
>>
>> thanks,
>> Coleen
>>>
>>> Thanks,
>>> Patricio
>>>
>>> On 1/28/20 6:36 PM, coleen.phillimore at oracle.com wrote:
>>>> Summary: Set allow_vm_block to true for this lock. It's
>>>> _safepoint_check_never so it's sort of implied (you can't safepoint
>>>> holding the lock and block out the vm thread).
>>>>
>>>> open webrev at
>>>> http://cr.openjdk.java.net/~coleenp/2020/8237080.01/webrev
>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8237080
>>>>
>>>> Ran test case with hard-coded failure, and tier1-6.
>>>>
>>>> Thanks,
>>>> Coleen
>>>
>>
>
More information about the hotspot-runtime-dev
mailing list