RFR: 8251397: Add release fence to ClassValueMap constructor

Paul Sandoz psandoz at openjdk.java.net
Sat Sep 12 12:11:05 UTC 2020


On Wed, 9 Sep 2020 12:35:06 GMT, Galder Zamarreño <github.com+50187+galderz 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.

Marked as reviewed by psandoz (Reviewer).

src/java.base/share/classes/java/lang/ClassValue.java line 381:

> 379:             if ((map = type.classValueMap) == null) {
> 380:                 map = new ClassValueMap();
> 381:                 // Place a Store fence as the last operation to emulate

Since the store was moved i suggest the comment be slightly updated:
"Place a Store fence after construction and before publishing to emulate"

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

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


More information about the core-libs-dev mailing list