On 1 September 2011 00:10,  <ma...@apache.org> wrote:
> Author: markt
> Date: Wed Aug 31 23:10:53 2011
> New Revision: 1163864
>
> URL: http://svn.apache.org/viewvc?rev=1163864&view=rev
> Log:
> Stop multiple calls to close() triggering an JMX error
>
> Modified:
>    
> commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
>
> Modified: 
> commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
> URL: 
> http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java?rev=1163864&r1=1163863&r2=1163864&view=diff
> ==============================================================================
> --- 
> commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
>  (original)
> +++ 
> commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
>  Wed Aug 31 23:10:53 2011
> @@ -1098,7 +1098,10 @@ public class GenericKeyedObjectPool<K,T>
>          evictionIterator = null;
>          evictionKeyIterator = null;
>          startEvictor(-1L);
> -         ManagementFactory.getPlatformMBeanServer().unregisterMBean(oname);
> +         if (oname != null) {
> +             
> ManagementFactory.getPlatformMBeanServer().unregisterMBean(oname);
> +             oname = null;
> +         }
>      }

If close() can be called from mulitple threads, then it's still
possible to unregister the bean twice.

I think the only way to fix this would be to synchronise the block -
making oname volatile would not help here.
Alternatively, use an atomic boolean to record the fact that the bean
has been registered.

>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to