RFR: 8309688: Data race on java.io.ClassCache$CacheRef.strongReferent [v5]
Aleksey Shipilev
shade at openjdk.org
Thu Jun 15 08:30:02 UTC 2023
On Thu, 15 Jun 2023 00:16:15 GMT, Man Cao <manc at openjdk.org> wrote:
>> Hi all,
>>
>> Could anyone review this small fix for a data race in java.io.ClassCache$CacheRef? This fix makes the code safer by making the code data-race-free.
>
> Man Cao has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:
>
> - Merge branch 'master' into JDK8309688
> - Removed volatile and comment about the benign race
> - Switch to using volatile instead of AtomicReference
> - Merge branch 'master' into JDK8309688
> - 8309688: Data race on java.io.ClassCache.strongReferent
Right. I have suggestions about the comment.
src/java.base/share/classes/java/io/ClassCache.java line 93:
> 91: // multiple threads calls get() with the same Class parameter.
> 92: // Fixing this race could introduce noticeable performance penalty.
> 93: // See the review thread for JDK-8309688 for details.
Feels like this comment belongs near `strongReferent` declaration. I suggest:
// This field is deliberately accessed without sychronization. ClassValue
// provides synchronization when CacheRef is published. However, when
// a thread reads this field, while another thread is clearing the field, it
// would formally constitute a data race. But that data race is benign, and
// fixing it could introduce noticeable performance penalty, see JDK-8309688.
private T strongReferent;
-------------
Marked as reviewed by shade (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/14386#pullrequestreview-1480988146
PR Review Comment: https://git.openjdk.org/jdk/pull/14386#discussion_r1230633686
More information about the core-libs-dev
mailing list