RFR: 8215754: ZGC: nmethod is not unlinked from Method before rendezvous handshake
Erik Österlund
erik.osterlund at oracle.com
Wed Jan 9 15:51:00 UTC 2019
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