Good to see the test added. I was also unable to reproduce the failure on my 
Core 2 Duo Mac laptop but the test and fix match up.

Mike


On May 14 2013, at 04:34 , Peter Levart wrote:

> On 05/14/2013 01:17 PM, David Holmes wrote:
>> Thanks Peter this looks good to me.
>> 
>> One minor thing please set the correct copyright year in the test, it should 
>> just be
>> 
>> Copyright (c) 2013, Oracle ...
> 
> Ok, fixed:
> 
> http://cr.openjdk.java.net/~plevart/jdk8-tl/String.contentEquals/webrev.04/
> 
> 
>> 
>> I couldn't get the test to actually fail, but I can see that it could.
> 
> Hm, do you have a multi-core chip? On my computer (i7 CPU) it fails 
> immediately and always. You could try varying the number of concurrent 
> threads and or the time to wait for exception to be thrown...
> 
>> 
>> David
>> 
>> On 14/05/2013 9:04 PM, Peter Levart wrote:
>>> Ok, here's the corrected fix:
>>> 
>>> http://cr.openjdk.java.net/~plevart/jdk8-tl/String.contentEquals/webrev.03/ 
>>> 
>>> I also added a reproducer for the bug.
>>> 
>>> Regards, peter
>>> 
>>> On 05/14/2013 07:53 AM, Peter Levart wrote:
>>>> 
>>>> Right, sb.length() should be used. I will correct that as soon as I
>>>> get to the keyboard.
>>>> 
>>>> Regards, Peter
>>>> 
>>>> On May 14, 2013 7:22 AM, "David Holmes" <david.hol...@oracle.com
>>>> <mailto:david.hol...@oracle.com>> wrote:
>>>> 
>>>>    Thanks Peter! I've filed
>>>> 
>>>>    8014477
>>>>    Race condition in String.contentEquals when comparing with
>>>>    StringBuffer
>>>> 
>>>>    On 14/05/2013 8:34 AM, Peter Levart wrote:
>>>> 
>>>>        On 05/14/2013 12:09 AM, Peter Levart wrote:
>>>> 
>>>>            I noticed a synchronization bug in String.contentEquals
>>>>            method. If
>>>>            called with a StringBuffer argument while concurrent thread is
>>>>            modifying the StringBuffer, the method can either throw
>>>>            ArrayIndexOutOfBoundsException or return true even though
>>>>            the content
>>>>            of the StringBuffer has never been the same as the String's.
>>>> 
>>>>            Here's a proposed patch:
>>>> 
>>>> http://cr.openjdk.java.net/~plevart/jdk8-tl/String.contentEquals/webrev.01/
>>>> <http://cr.openjdk.java.net/%7Eplevart/jdk8-tl/String.contentEquals/webrev.01/>
>>>> 
>>>>            Regards, Peter
>>>> 
>>>> 
>>>>        Or even better (with some code clean-up):
>>>> 
>>>> http://cr.openjdk.java.net/~plevart/jdk8-tl/String.contentEquals/webrev.02/
>>>> <http://cr.openjdk.java.net/%7Eplevart/jdk8-tl/String.contentEquals/webrev.02/>
>>>> 
>>>> 
>>>>    This part is not correct I believe:
>>>> 
>>>>    1010     private boolean
>>>>    nonSyncContentEquals(AbstractStringBuilder sb) {
>>>>    1011         char v1[] = value;
>>>>    1012         char v2[] = sb.getValue();
>>>>    1013         int n = v1.length;
>>>>    1014         if (n != v2.length) {
>>>>    1015             return false;
>>>>    1016         }
>>>> 
>>>>    v2 can be larger than v1 if v2 is not being fully used (ie count <
>>>>    length).
>>>> 
>>>>    David
>>>>    -----
>>>> 
>>> 
> 

Reply via email to