[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