RFR: 8251397: Add release fence to ClassValueMap constructor

Galder Zamarreño github.com+50187+galderz at openjdk.java.net
Sat Sep 12 12:11:09 UTC 2020


On Wed, 9 Sep 2020 12:43:20 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> * Release fence guarantees that cacheArray field will published with a non-null value.
>> * Without this fix, CacheValueMap.cacheArray can sometimes be seen as null.
>> 
>> This is a follow up to @PaulSandoz's feedback
>> [here](https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-August/068248.html) for the first attempt to fix
>> [JDK-8251397](https://bugs.openjdk.java.net/browse/JDK-8251397).  In this update, the fence has been moved to
>> `initializeMap()` and added Paul's suggested comment.
>> Annotating `classValueMap` with `@Stable` is outside the scope of this issue.
>
> src/java.base/share/classes/java/lang/ClassValue.java line 386:
> 
>> 384:                 // since stores to the fields of ClassValueMap will not be reordered
>> 385:                 // to occur after the store to the field type.classValueMap
>> 386:                 UNSAFE.storeFence();
> 
> Wait a second, how's that supposed to work? The `storeFence` should be between the end of `new ClassValueMap()` and the
> store to `classValueMap`.

Ah yes, my bad ��‍♂️

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

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


More information about the core-libs-dev mailing list