RFR: 8212682: Avoid holding Compile_lock when blocking for GC in ObjArrayKlass::allocate_objArray_klass()
Erik Österlund
erik.osterlund at oracle.com
Wed Oct 24 08:52:23 UTC 2018
Hi Dean,
On 2018-10-23 22:27, dean.long at oracle.com wrote:
> Can allocate_objArray_klass() end up calling
> SystemDictionary::add_to_hierarchy()? If so, then you'll end up
> locking Compile_lock anway, but in the wrong order with respect to
> MultiArray_lock.
No, I can't see that allocate_objArray_klass() ever calls
SystemDictionary::add_to_hierarchy(). If it did, we would assert that
the Compile_lock is held; it never re-acquires the lock.
Thanks,
/Erik
> dl
>
> On 10/23/18 7:59 AM, Erik Österlund wrote:
>> Hi,
>>
>> We occasionally blockingly wait for GC in allocations in
>> ObjArrayKlass::allocate_objArray_klass(), while holding the
>> Compile_lock.
>> This is problematic for concurrent class unloading that needs to hold
>> that lock in the unloading path. This introduces a potential deadlock
>> situation.
>>
>> After staring enough at this code together with help from Coleen, I
>> have convinced myself that the Compile_lock is in fact not needed in
>> this path, and there is nothing to my knowledge it actually protects
>> here. The vague comment next to the lock suggests its purpose is to
>> protect vtable stubs. But it doesn't. There is a VtableStubs_lock for
>> that, and I find no traces if the Compile_lock having anything to do
>> with that.
>>
>> Coleen helped me trying to trace down where this locking code came
>> from. It takes us back to before anyone was around, and does not seem
>> to have changed in the past 2 decades, and its origins are a bit
>> unclear. The theory is that perhaps vtable stubs used to be protected
>> by the Compile_lock in ancient times, and the locking code is still
>> around because nobody dared to touch it.
>>
>> Since both code analysis and mach5 suggest there is no reason for
>> this lock to be held here, I propose to remove it with this patch.
>>
>> If anyone that has been around for more than 2 decades in HotSpot
>> happens to know the reason why this locking was introduced, any
>> commentary around that would be very appreciated.
>>
>> Webrev:
>> http://cr.openjdk.java.net/~eosterlund/8212682/webrev.00/
>>
>> Bug:
>> https://bugs.openjdk.java.net/browse/JDK-8212682
>>
>> Thanks,
>> /Erik
>
More information about the hotspot-dev
mailing list