[ https://issues.apache.org/jira/browse/BEANUTILS-373?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Niall Pemberton resolved BEANUTILS-373. --------------------------------------- Resolution: Fixed Fix Version/s: 1.8.3 Doh! Must have had a brain fart when I applied the fix for BEANUTILS-318. Thanks, this is now fixed: http://svn.apache.org/viewvc?rev=926112&view=rev > CLONE - MethodUtils is not thread safe because WeakFastHashMap which uses > WeakHashMap is not thread-safe. > --------------------------------------------------------------------------------------------------------- > > Key: BEANUTILS-373 > URL: https://issues.apache.org/jira/browse/BEANUTILS-373 > Project: Commons BeanUtils > Issue Type: Bug > Components: Bean / Property Utils > Affects Versions: 1.8.2 > Environment: Weblogic 9.2 on Linux, but should not be relevant > Reporter: Andrew Sunde > Assignee: Niall Pemberton > Fix For: 1.8.3 > > > The problem lies in the class org.apache.commons.beanutils.MethodUtils. This > class is keeping a global cache in a non synchronized WeakFastHashMap (which > claims to be syncronized). When operating in Fast mode (which is what the > WeakFastHashMap is set to after it is created), it then access the > underlining WeakHashMap without synchronization. Therefore this can lead to a > corruption in the underlining HashMap. > See the description of the WeakHashMap javadoc: > From Java Sun: " > Like most collection classes, this class is not synchronized. A synchronized > WeakHashMap may be constructed using the Collections.synchronizedMap method. > .... > The behavior of the WeakHashMap class depends in part upon the actions of the > garbage collector, so several familiar (though not required) Map invariants > do not hold for this class. Because the garbage collector may discard keys at > any time, a WeakHashMap may behave as though an unknown thread is silently > removing entries. > " > Therefore even if you are doing a "get" from the hashmap, there is a chance > that you could get a corrupted hashmap because the garbage collector could be > changing the hashmap on the fly. This could lead to threads getting stuck in > an infinite loop. > The modification to make the MethodUtils cache thread safe is a one line > change. > Before: > private static WeakFastHashMap cache = new WeakFastHashMap(); > After: > private static Map cache = Collections.synchronizedMap(new WeakHashMap()); -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.