RFR: 8330465: Stable Values and Collections (Internal)

Per Minborg pminborg at openjdk.org
Tue May 14 14:14:25 UTC 2024


On Mon, 22 Apr 2024 17:09:39 GMT, Chen Liang <liach at openjdk.org> wrote:

>> src/java.base/share/classes/jdk/internal/lang/StableValue.java line 130:
>> 
>>> 128:      * } else {
>>> 129:      *     V newValue = supplier.get();
>>> 130:      *     stable.setOrThrow(newValue);
>> 
>> If ::computeIfUnset allows racy sets, then it isn't equivalent to this code as ::setOrThrow will throw on a race, correct?
>
> Indeed, this if-else should be guarded by a synchronized block, except the lock is on the internal mutex which is not publicly exposed.

`computeIfUnset()` is indeed guarded by a synchronized block, only it sits on the method declaration of `computeIfUnsetVolatile0`. I think we should have an internal mutex. This will also correspond to the stable collections which have internal mutexes for each index/key.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18794#discussion_r1575972396


More information about the compiler-dev mailing list