RFR: 8215491: ICStubInterface::finalize finds zombie nmethod with ZGC concurrent class unloading

dean.long at oracle.com dean.long at oracle.com
Mon Dec 17 19:27:12 UTC 2018

On 12/17/18 8:56 AM, Erik Österlund wrote:
> 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. 

Do we normally have to creates stubs to clean an IC?

> 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.

Where is the unregistering happening?

Doing the clearing after it's a zombie does sound safer.


> 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