+1 thanks.

Are you sure not clearing the queues, map and list on clear is OK?
Could this result in memory leaks in some apps?

On 6/2/09, Mark Thomas <ma...@apache.org> wrote:
> Phil Steitz wrote:
>> Good catch. Yes, needs to by synched (and that could be tricky, with
>> destroy between). Looks to me like destroy destroys the pairs, but
>> does not clear the queues (prior to change) and clear clears _poolList
>> but not _poolMap. Could be I am wrong. I Will look at this some more
>> this eve.
>
> I did some more digging and I think r780905 needs to be reverted.
>
> The root cause is an issue you and Sebb had already identified - the
> eviction cursors are not reset on clear(). Stepping through the code
> what happens is that the first eviction attempts to destroy an object
> that has already been destroyed. This appears to succeed - hence why we
> end up one eviction short at the end of the test.
>
> I can reproduce the problem and clearing the eviction cursors as part fo
> clear appears to resolve the issue. I have tried (and failed) to add
> some tests for this. What I really want to do have the factory destroy()
> method throw an exception if you try to destroy the same object twice.
> Unfortunately, the pool implementations just swallow this exception.
>
> Logging (ie POOL 2.x) could be a solution to this. Another option is to
> remove the throws declaration from the factory destroy() method and
> leave it up to factory implementations to determine what exceptions are
> safe to be swallowed. That is a small, but very significant, API change
> that needs discussion come 2.x
>
> I'll revert r780905, add the fix described above and than re-review the
> dev archive and look at the other potential issues identified over the
> last few days.
>
> Mark
>
>>
>> On 6/2/09, Mark Thomas <ma...@apache.org> wrote:
>>> pste...@apache.org wrote:
>>>> Author: psteitz
>>>> Date: Tue Jun  2 02:01:22 2009
>>>> New Revision: 780905
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=780905&view=rev
>>>> Log:
>>>> Ensure that clear() fully clears the pool.
>>> <snip/>
>>>
>>>> @@ -1293,6 +1293,7 @@
>>>>              }
>>>>          }
>>>>          destroy(toDestroy);
>>>> +        _poolMap.clear();
>>>>      }
>>>>
>>>>      /**
>>>
>>> Still working through the e-mails from over the weekend but on first
>>> inspection that _poolMap.clear() needs to be inside the sync block to
>>> keep it thread safe. Given that, I am having troubling seeing how the
>>> _poolMap isn't already empty at that point. I wonder if we got to the
>>> real root cause of the bug ...?
>>>
>>> I'll get set up to do some testing and report my findings.
>>>
>>> Mark
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

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

Reply via email to