RFR: 8166842: String.hashCode() has a non-benign data race
David Holmes
david.holmes at oracle.com
Wed Sep 28 13:05:22 UTC 2016
On 28/09/2016 10:44 PM, Peter Levart wrote:
> Hi,
>
> According to discussion here:
>
> http://cs.oswego.edu/pipermail/concurrency-interest/2016-September/015414.html
>
>
> it seems compact strings introduced (at least theoretical) non-benign
> data race into String.hasCode() method.
>
> Here is a proposed patch:
>
> http://cr.openjdk.java.net/~plevart/jdk9-dev/8166842_String.hashCode/webrev.01/
I'm far from convinced that the bug exists - theoretical or otherwise -
but the "fix" is harmless.
When we were working on JSR-133 one of the conceptual models is that
every write to a variable goes into the set of values that a read may
potentially return (so no out-of-thin-air for example). happens-before
establishes constraints on which value can legally be returned - the
most recent. An additional property was that once a value was returned,
a later read could not return an earlier value - in essence once a read
returns a given value, all earlier written values are removed from the
set of potential values that can be read.
Your bug requires that the code act as-if written:
int temp = hash;
if (temp == 0) {
hash = ...
}
return temp;
and I do not believe that is allowed.
David
>
> For the bug:
>
> https://bugs.openjdk.java.net/browse/JDK-8166842
>
>
>
> JDK 8 did not have this problem, so no back-porting necessary.
>
> Regards, Peter
>
More information about the core-libs-dev
mailing list