Deven,

CR number is  7164191 .

Could you re-send me your original e-mail with problem description and
webrev link.

 I'll put it to CR comment field.


-Dmitry



On 2012-04-24 16:15, Dmitry Samersoff wrote:
> Deven,
> 
> After close look and off-line discussion with David Holmes,
> the changes looks good for me.
> 
> I'll take care of the rest.
> 
> We have one more place in Agent.java executing exactly the same code
> so I'll change both of them on your behalf.
> 
> -Dmitry
> 
> 
> On 2012-04-23 11:43, Deven You wrote:
>> Thanks David,
>>
>> So is it ok for you to contribute this patch?
>>
>> On 04/23/2012 02:36 PM, David Holmes wrote:
>>> Except of course that Properties is a Hashtable and synchronizes on
>>> 'this' for all public methods. So locking the properties object in the
>>> client code will guarantee exclusive access to it.
>>>
>>> Sorry about that.
>>>
>>> David
>>> -----
>>>
>>> On 23/04/2012 4:30 PM, David Holmes wrote:
>>>> Deven,
>>>>
>>>> On 23/04/2012 3:54 PM, Deven You wrote:
>>>>> On 04/18/2012 02:20 PM, Deven You wrote:
>>>>>> On 04/18/2012 01:34 PM, Mandy Chung wrote:
>>>>>>>
>>>>>>>
>>>>>>> I think this could still run into CME. System Properties is not a
>>>>>>> synchronized map and the setter methods (System.setProperty or
>>>>>>> Properties.put method) doesn't synchronize on the Properties object.
>>>>>>>
>>>>>>>
>>>>>>> The setter methods I'm referring to are System.setProperty and
>>>>>>> System.getProperties().put().
>>>>>>>
>>>>>>
>>>>>> I have gone through the Agent.java, I think other set/put methods
>>>>>> related to properties are protected properly.
>>>>>>
>>>>>> public static void agentmain using parseString(args) which return a
>>>>>> properties which is a local var and is not possible to cause
>>>>>> concurrent problem when call config_props.putAll(arg_props).
>>>>>>
>>>>>> private static synchronized void startLocalManagementAgent() is
>>>>>> synchronized already.
>>>>>>
>>>>>> private static synchronized void startRemoteManagementAgent(String
>>>>>> args) is synchronized also.
>>>>>>
>>>>>> Could you point where the CME may ocurr?
>>>>>
>>>>> Is there any suggestion from the mailing list?
>>>>
>>>> The problem is that System.getProperties() returns a globally
>>>> accessible
>>>> set of properties. So even if you prevent the Agent code from modifying
>>>> those properties concurrently with other use in the Agent, you have no
>>>> such guard for any other piece of code in the system which might also
>>>> modify the properties. So the race condition you were trying to fix
>>>> still exists. I don't see any way to fix this. No matter what you do
>>>> another thread can modify the system properties while you are iterating
>>>> them. Instead you need to anticipate the CME and try to recover from it
>>>> (also non-trivial).
>>>>
>>>> Cheers,
>>>> David Holmes
>>>
>>
>>
> 
> 


-- 
Dmitry Samersoff
Java Hotspot development team, SPB04
* There will come soft rains ...

Reply via email to