sebb wrote:
> The method SharedPoolDataSource.getPooledConnectionAndInfo has the
> following code:
> 
>             synchronized (userKeys) {
>                 if (userKeys.containsKey(username)) {
>                     userKeys.remove(username);
>                 }
>             }
> 
> Why not just use userKeys.remove(username)?

That would work, other than other problem below.
> What is the purpose of checking the map first?
> Also, the keys used for userKeys consist of the username+password, so
> this doesn't really make sense anyway - it will only remove an entry
> if the password is the empty string.

Yes, it should be username+password, so the code is really doing
nothing now.  The concatenation setup, btw, is bogus as there is no
guarantee that you won't have collisions.  Probably worth raising a
defect for this.

Good catch, I will fix the cleanup bug.
> 
> Note that the synch. block may still be needed, because
> LRUMap.remove() - i.e. SequencedHashMap.remove() - updates the
> underlying map and some other fields but is not synchronised.
> Unfortunately the Javadoc does not say what the class invariants are.

Yes the synch is needed.

Phil


> 
> ---------------------------------------------------------------------
> 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