Valentin Mayamsin created POOL-284:
--------------------------------------

             Summary: "Returned object not currently part of this pool" when 
using mutable objects
                 Key: POOL-284
                 URL: https://issues.apache.org/jira/browse/POOL-284
             Project: Commons Pool
          Issue Type: Bug
    Affects Versions: 2.2
            Reporter: Valentin Mayamsin


I'm using pool to reuse expensive Sets (storing millions of items). Here is a 
test which fails:
{code}
        GenericObjectPoolConfig config = new GenericObjectPoolConfig ();
        GenericObjectPool<Set> aPool = new GenericObjectPool<> ( new 
BasePooledObjectFactory<Set> ()
        {
            @Override
            public Set create () throws Exception
            {
                return Sets.newHashSet ();
            }

            @Override
            public PooledObject<Set> wrap ( Set o )
            {
                return new DefaultPooledObject<> ( o );
            }

            @Override
            public void passivateObject ( PooledObject<Set> p ) throws Exception
            {
                p.getObject ().clear ();
                super.passivateObject ( p );
            }
        }, config );

        Set set = aPool.borrowObject ();

        set.add ( new Object () );
        
        aPool.returnObject ( set );
{code}

This is because GenericObjectPool uses a HashMap<Object, PooledObject> to 
correlate objects and state. HashMap stores objects correlated to their 
hashCode. So in case object's state change then hashCode will change, thus Map 
will fail to correlate this object since it stores old hashCode



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to