[9] RFR (S): 8143408: Crash during InstanceKlass unloading when clearing dependency context
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Tue Nov 24 13:11:16 UTC 2015
http://cr.openjdk.java.net/~vlivanov/8143408/webrev.00
https://bugs.openjdk.java.net/browse/JDK-8143408
The fix for 8139595 [1] assumed that there shouldn't be any valid
dependencies on a klass being unloaded (see changes in
IK::release_C_heap_structures()). Only stale entries were accepted.
Unfortunately, it's not the case. The problem is that the klass
dependency context can contain live dependencies, since there's a race
between nmethod & klass unloading. If the klass is dead when nmethod
unloading happens, relevant dependencies aren't removed from the context
associated with the class (see nmethod::flush_dependencies). It ends up
during klass unloading as seemingly live dependencies pointing to
unloaded nmethods and causes a crash in DC::remove_all_dependents() when
it touches unloaded nmethod.
The fix is to revert IK::release_C_heap_structures() to pre-8139595
state: deallocate all entries w/o consulting their state (DC::wipe()).
Testing: jprt.
Thanks!
Best regards,
Vladimir Ivanov
[1] http://hg.openjdk.java.net/jdk9/hs-comp/hotspot/rev/09ac9142d6ef
More information about the hotspot-compiler-dev
mailing list