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

Reply via email to