[9] RFR (XS): 8138922: StubCodeDesc constructor publishes partially-constructed objects on StubCodeDesc::_list

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Wed Feb 10 18:13:53 UTC 2016


StubCodeDesc keeps a list of all descriptors rooted at 
StubCodeDesc::_list by placing newly instantiated objects there at the 
end of the constructor. Unfortunately, it doesn't guarantee that only 
fully-constructed objects are visible, because compiler (or HW) can 
reorder the stores.

Since method handle adapters are generated on demand when j.l.i 
framework is initialized, it's possible there are readers iterating over 
the list at the moment. It's not a problem per se until everybody sees a 
consistent view of the list.

The fix is to insert a StoreStore barrier before registering an object 
on the list.

(I also considered moving MH adapter allocation to VM initialization 
phase before anybody reads the list, but it's non-trivial since 
MethodHandles::generate_adapters() has a number of implicit dependencies.)

Testing: manual (verified StubCodeMark assembly), JPRT


Best regards,
Vladimir Ivanov

More information about the hotspot-dev mailing list