[
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.