RFR: 8261407: ReflectionFactory.checkInitted() is not thread-safe [v2]

liach duke at openjdk.java.net
Sun Dec 19 07:08:26 UTC 2021


On Sun, 19 Dec 2021 05:56:55 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> liach has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Just use volatile directly to ensure read order
>
> src/java.base/share/classes/jdk/internal/reflect/ReflectionFactory.java line 695:
> 
>> 693: 
>> 694:         // ensure previous fields are visible before initted is
>> 695:         Unsafe.getUnsafe().storeStoreFence();
> 
> Ensuring ordering on the writer side, without also ensuring ordering on the reader side, doesn't solve an ordering problem. Just make `initted` volatile and this should be safe from a Java Memory Model perspective.

On a side note, would a store load fence (like `VarHandle.storeFence`) after the write be a valid alternative, so the field itself can be get plain?

-------------

PR: https://git.openjdk.java.net/jdk/pull/6889


More information about the core-libs-dev mailing list