RFR: 8215491: ICStubInterface::finalize finds zombie nmethod with ZGC concurrent class unloading
Erik Österlund
erik.osterlund at oracle.com
Mon Dec 17 16:56:55 UTC 2018
Hi,
Today, when converting a not_entrant nmethod to zombie, the sweeper
first clears the IC stubs of that nmethod, and then make_zombie(). With
concurrent class unloading, this ordering is a bit unfortunate. Between
clearing the IC stubs and making it zombie, the concurrent GC threads
may hit a timing window where they will create IC stubs for concurrently
cleaning the ICs of this still is_alive() nmethod. The result is that
during safepoint cleanup, when we finalize the IC stubs, we find one
associated with a zombie.
The unregistering of the nmethod from the GC will block during
concurrent nmethod unloading, so clearing the IC stubs after the nmethod
has become zombie is a lot more sane as there can not be any such races
then.
Bug:
https://bugs.openjdk.java.net/browse/JDK-8215491
Webrev:
http://cr.openjdk.java.net/~eosterlund/8215491/webrev.00/index.html
Thanks,
/Erik
More information about the hotspot-dev
mailing list