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

Reply via email to