[ 
https://issues.apache.org/jira/browse/DERBY-3675?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12597884#action_12597884
 ] 

Knut Anders Hatlen commented on DERBY-3675:
-------------------------------------------

I see how that could cause a ConcurrentModificationException. When the 
connection is closed, it simply iterates through the list of listeners. If one 
of the listeners is removed while iterating, the list is modified and the 
exception is thrown on the next operation on the list iterator. The code seems 
properly synchronized, so the only way this can happen is if one of the 
listeners adds or removes a listener. It should be easy to fix. We only need to 
create a copy of the list and iterate over the listeners in the copy instead of 
the original. This is by the way exactly what java.util.Observable does, so 
perhaps the cleanest way to fix it is to create a wrapper around 
java.util.Observer/java.util.Observable.

> ConcurrentModificationException on closing pooled connection
> ------------------------------------------------------------
>
>                 Key: DERBY-3675
>                 URL: https://issues.apache.org/jira/browse/DERBY-3675
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Client
>    Affects Versions: 10.4.1.3
>            Reporter: Trejkaz
>
> I'm seeing the following exception from calling close() on a connection 
> returned from a CollectionPoolDataSource.
> java.util.ConcurrentModificationException
>       at 
> java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
>       at java.util.AbstractList$Itr.next(AbstractList.java:343)
>       at 
> org.apache.derby.client.ClientPooledConnection.recycleConnection(ClientPooledConnection.java:343)
>       at 
> org.apache.derby.client.am.LogicalConnection.close(LogicalConnection.java:83)
> The only particularly unique thing about the area of the code where we're 
> doing this is that we're closing it immediately after opening it, as an 
> initial check to make sure it can connect.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to