[14] RFR(S): 8231501: VM crash in MethodData::clean_extra_data(CleanExtraDataClosure*): fatal error: unexpected tag 99
Roland Westrelin
rwestrel at redhat.com
Mon Dec 9 15:44:22 UTC 2019
Hi Christian,
> Before loading and copying the extra data from the MDO to the ciMDO in
> ciMethodData::load_extra_data(), the metadata is prepared in a
> fixed-point iteration by cleaning all SpeculativeTrapData entries of
> methods whose klasses are unloaded [3]. If it encounters such a dead
> entry it releases the extra data lock (due to ranking issues) and tries
> again later [4]. This release of the lock triggers the bug: There can be
> cases where one thread A is waiting in the whitebox API method to get
> the extra data lock [2] to clean the extra data for the very same MDO
> for which another thread B just released the lock at [4]. If that MDO
> actually contained SpeculativeTrapData entries, then thread A cleaned
> those but the ciMDO, which thread B is preparing, still contains the
> uncleaned old MDO extra data (because thread B only made a snapshot of
> the MDO earlier at [5]).
Would it be possible to call prepare_data() before the snapshot is taken
so the snapshot doesn't contain any entry that are then removed?
Roland.
More information about the hotspot-compiler-dev
mailing list