On 06/18/2018 06:53 PM, Claes Redestad wrote:
Plain write that follows in program a volatile write, can in theory
float before the volatile write. So if you publish a Properties
instance via data race (via plain write), the observer may still see
uninitialized 'map' and 'defaults' fields.
Right
http://cr.openjdk.java.net/~redestad/8199435.01/
(Yes, using VarHandle.storeStoreFence would do the exact same thing,
but is not usable from Properties as the VarHandle impl needs to read
some system properties...)
/Claes
This looks good to me. One might think that the same fence is needed in
deserialization too (readHashtable), but ObjectInputStream already makes
care of that (see ObjectInputStream.freeze() and the two calls in
readObject() and readUnshared()), so this is fine now.
Regards, Peter