-
Bug
-
Resolution: Fixed
-
P2
-
13
-
b21
-
Verified
Static call stubs are cleared in debug builds before an assert checking for dead metadata. The reason is that the static call stub has metadata, and it complains about dead metadata being left after inline cache cleaning of is_alive nmethods.
...except class redefinition looks at this metadata to determine if there is old metadata in subsequent safepoints, and they could have been unloaded then. Ouch. So maybe we shouldn't squelch that assert.
...and with concurrent class unloading, we can't just clear the call stub of a concurrently running JavaThread; they can get stuck in an infinite loop.
All things considered, clearing static call stubs when unloading the code cache seems like a bad idea.
...except class redefinition looks at this metadata to determine if there is old metadata in subsequent safepoints, and they could have been unloaded then. Ouch. So maybe we shouldn't squelch that assert.
...and with concurrent class unloading, we can't just clear the call stub of a concurrently running JavaThread; they can get stuck in an infinite loop.
All things considered, clearing static call stubs when unloading the code cache seems like a bad idea.
- relates to
-
JDK-8296440 Remove Method* handling from cleanup_inline_caches_impl
- In Progress
-
JDK-8223585 vmTestbase/runtime/pcl/* get SEGV in MetadataOnStackClosure::do_metadata(Metadata*)+0x0
- Resolved
-
JDK-8225681 vmTestbase/nsk/jvmti/RedefineClasses/StressRedefine fails due to a) MT-unsafe modification of inline cache
- Resolved
-
JDK-8230401 ClassLoaderData::_keep_alive is read with wrong type in c2i entry barrier
- Resolved
-
JDK-8295097 DirectNativeCallWrapper::verify_resolve_call fails with "assert(db != __null && !db->is_adapter_blob()) failed: must use stub!"
- Closed