RFR 8209184: JDK8 ResourceBundle vulnerable to GC (fix included) (original) (raw)

Hans Boehm hboehm at google.com
Wed Aug 15 05:44:08 UTC 2018


FWIW, since there was agreement that empty static methods should work in this context, that seems like the best option to me.

On Tue, Aug 14, 2018 at 4:54 PM mandy chung <mandy.chung at oracle.com> wrote:

Thanks for the information. Not sure what's the best option we can do in 8u. I think it's acceptable to have a fix that works in the current context (like empty static method).

Thoughts? Mandy On 8/14/18 4:22 PM, Hans Boehm wrote: > I haven't looked at the details here, but comparing against a volatile > is not in general a portable way to keep an object live. Like empty > static methods, it may be fine in the current (OpenJDK) context. > > Volatile loads have roach motel semantics and can be advanced past other > operations. The comparison can be done early, too, keeping only the > condition code. There is no guarantee the reference will still be around > when you expect it. > > I haven't come up with a great compiler-independent replacement for > reachabilityFence. > > On Tue, Aug 14, 2018 at 8:25 AM mandy chung <mandy.chung at oracle.com_ _> <mailto:mandy.chung at oracle.com>> wrote: > > Hi Adam, > > Have you tried Peter's suggestion if an empty static method taking an > Object parameter? Does it work for you? > > Your proposed approach seems fine and I would suggest to put the > check in a static keepAlive method that will make it explicitly. > > Mandy > > On 8/10/18 8:42 AM, Adam Farley8 wrote: > > Hi All, > > > > This bug could be fixed by comparing the Class Loader with a blank > > static volatile Object (defined outside the method scope) at the > > end of the getBundleImpl class. > > > > E.g. > > > > ----------------------------------------- > > +1322 > > /** > > * volatile reference object to guard the ClassLoader object > > * being garbage collected before getBundleImpl() method > completes > > * the caching and retrieving of requested Resourcebundle object > > */ > > private static volatile Object vo = new Object(); > > > > > > +1400 > > //Should never be true. Using the loader here prevents it being GC'd. > > if (loader == vo) throw new Error("Unexpected error."); > > ----------------------------------------- > > > > Will upload a webrev after debate. > > > > - Adam > > Unless stated otherwise above: > > IBM United Kingdom Limited - Registered in England and Wales with > number > > 741598. > > Registered office: PO Box 41, North Harbour, Portsmouth, > Hampshire PO6 3AU > > >



More information about the core-libs-dev mailing list