RFR: 8215754: ZGC: nmethod is not unlinked from Method before rendezvous handshake
Erik Österlund
erik.osterlund at oracle.com
Fri Jan 11 13:10:45 UTC 2019
Hi Nils,
Thanks for the review!
/Erik
On 2019-01-11 13:59, Nils Eliasson wrote:
> Looks great!
>
> // Nils
>
> On 2019-01-09 16:51, Erik Österlund wrote:
>> Hi,
>>
>> During concurrent class unloading in ZGC, the nmethod unloading goes
>> through 3 phases:
>>
>> 1) Unlink all references to nmethods
>> 2) Rendezvous handshake, to make sure all JavaThreads are in the new
>> epoch where unlinking is done
>> 3) Purge nmethods (by making them unloaded).
>>
>> However, we unfortunately unliked the code from the Method to the
>> nmethod during #3 inside of the nmethod entry barrier instead of #1,
>> causing JavaThreads to still observe these nmethods during phase #3,
>> racing with make_unloaded(), and causing crashes in the nmethod entry
>> barrier.
>>
>> The fix for this is to unlink the nmethod from the method during the
>> first phase. I additionally eagerly unlink it in the nmethod barrier,
>> to allow calls into unloading nmethods to not get stuck until the GC
>> comes around to do it.
>>
>> Bug:
>> https://bugs.openjdk.java.net/browse/JDK-8215754
>>
>> Webrev:
>> http://cr.openjdk.java.net/~eosterlund/8215754/webrev.00/
>>
>> Thanks,
>> /Erik
More information about the hotspot-gc-dev
mailing list