Race condition in Class.getName()

Joe Darcy Joe.Darcy at Sun.COM
Sat Sep 12 00:37:09 UTC 2009


Martin Buchholz wrote:
> On Fri, Sep 11, 2009 at 16:48, Joe Darcy<Joe.Darcy at sun.com> wrote:
>   
>> Martin Buchholz wrote:
>>     
>>> It is believed that the java memory model allows Class.getName()
>>> to return null.
>>> This is one of those methods with an intentional data race.
>>> Probably this has not been seen in practice because only
>>> a perverse or adversarial runtime would load the "name" field
>>> twice, out-of-order, as it seems to be allowed to.
>>>
>>> diff --git a/src/share/classes/java/lang/Class.java
>>> b/src/share/classes/java/lang/Class.java
>>> --- a/src/share/classes/java/lang/Class.java
>>> +++ b/src/share/classes/java/lang/Class.java
>>> @@ -565,8 +565,9 @@
>>>      *          represented by this object.
>>>      */
>>>     public String getName() {
>>> +        String name = this.name;
>>>         if (name == null)
>>> -            name = getName0();
>>> +            this.name = name = getName0();
>>>         return name;
>>>     }
>>>
>>> Martin
>>>
>>>       
>> Hello.
>>
>> The change looks fine to me.  Do you want a bug filed, etc.?
>>     
>
> Yup.  I will commit as soon as I get a bug + synopsis.
>   

6881442 (reflect) Race condition in Class.getName()

-Joe



More information about the core-libs-dev mailing list