Thanks, Christoph
On Sat, Mar 1, 2008 at 4:21 AM, Christoph Kutzinski <[EMAIL PROTECTED]> wrote:
> As the 'inversed' locking order in evict() is obviously the source of
> the problems, I would try to avoid calling any _factory methods while
> holding the 'this' lock.
+1
evict and addObject currently violate this and I think both should be fixed.
>
> I thinking about something like this:
>
> public void evict() {
> CursorableLinkedList tmpPool;
> Collection connsToEvict = new ArrayList();
> synchronized(this) {
> tmpPool = new CursorableLinkedList(_pool);
> }
>
> // checking for conns to evict, calling methods on _factory and adding
> // conns to evict to connsToEvict
>
> synchronized(this) {
> // remove conns in connsToEvict from _pool
> // ignoring conns that are (currently) not in pool
> }
> }
>
> Obviuosly, this doesn't work with the evictionCursor as it is
> implemented now, so it would require some work on that one.
>
I think something like this might work if we can solve:
1) Maintaining the cycling behavior of the evictionCursor - will be
tricky, but should be doable. 2) "ignoring conns that are
(currently) not in pool" in the second synch block - hard to do
efficiently, but again should be doable
3) when to do _factory.destroyObject - can't do this is the
mid-section because borrowObject could jump in and grab the destroyed
object. Need some way to prevent that, maybe by locking / marking the
ObjectTimeStampPair.
Phil
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]