l_buf = ByteBuffer.allocateDirect( m_config .getBufferSize() ) ; m_interestLists.put( l_buf, new ArrayList( 3 ) ) ;
l_list = new BufferListPair() ; m_freeList.add( l_list ) ; m_allList.add( l_list ) ;
    public synchronized ByteBuffer getBuffer( Object a_party )         throws ResourceException    {        ByteBuffer l_buf = null ;                if ( m_freeList.size() == 0 )        {            if ( ( m_freeList.size() + m_config.getIncrement() ) <=                     m_config.getMaximumSize() )            {                for ( int ii = 0; ii < m_config.getIncrement(); ii++ )                {                    l_buf = ByteBuffer.allocateDirect( m_config                            .getBufferSize() ) ;                     m_interestLists.put( l_buf, new ArrayList( 3 ) ) ;                }            }            else            {                    m_monitor.resourceUnavailable( this, a_party ) ;                throw new ResourceException( "Free Buffers unavailable" ) ;            }        }                // remove from free list and add to in use list then report to monitir        l_buf = ( ByteBuffer ) m_freeList.remove( 0 ) ;        m_inUseList.add( l_buf ) ;        m_monitor.bufferTaken( this, l_buf, a_party ) ;        // claim interest on the buffer automatically then report to monitor        ArrayList l_list = ( ArrayList ) m_interestLists.get( l_buf ) ;        l_list.add( a_party ) ;        m_monitor.interestClaimed( this, l_buf, a_party ) ;        return l_buf ;    }