Code review request: 7063647, jsse/runtime, To use synchronized map in key manager
Xuelei Fan
xuelei.fan at oracle.com
Tue Aug 9 00:58:50 UTC 2011
On 8/9/2011 8:03 AM, Brad Wetmore wrote:
> Why do you need the "syncronchized (credentialsMap)" at line 344? Aren't
> all writes done during the constructor init?
>
The credentialsMap.entrySet() returns the reference of the
backed/internal set, the iteration of the set is not thread safe. The
Collections.synchronizedMap specification requires:
------------------
It is imperative that the user manually synchronize on the returned map
when iterating over any of its collection views:
Map m = Collections.synchronizedMap(new HashMap());
...
Set s = m.keySet(); // Needn't be in synchronized block
...
synchronized (m) { // Synchronizing on m, not s!
Iterator i = s.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
Failure to follow this advice may result in non-deterministic behavior.
------------------
Thanks for the code review.
Xuelei
> Otherwise, looks ok.
>
> Brad
>
>
> On 8/7/2011 8:43 PM, Xuelei Fan wrote:
>> webrev: http://cr.openjdk.java.net/~xuelei/7063647/webrev.00/
>>
>> SunX509KeyManagerImpl should be multiple thread safe, need to
>> synchronize cached map:
>> private Map<String,X509Credentials> credentialsMap;
>> private Map<String,String[]> serverAliasCache;
>>
>> Thanks,
>> Xuelei
More information about the security-dev
mailing list