[ 
https://issues.apache.org/jira/browse/DERBY-3401?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen updated DERBY-3401:
--------------------------------------

    Attachment: d3401-statement_events.stat
                d3401-statement_events.diff

Here's a test and a fix for the statement event listeners. In the current 
trunk, adding or removing listeners from a listener causes 
ConcurrentModificationException (both client and embedded). Since this was JDBC 
4.0 code, I went for the simple solution and just replaced Vector/ArrayList 
with CopyOnWriteArrayList and removed the synchronization.

All the regression tests passed.

> Removing a ConnectionEventListener from a PooledConnection during its 
> connectionClosed() callback causes other ConnectionEventListener callbacks to 
> be missed
> -------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3401
>                 URL: https://issues.apache.org/jira/browse/DERBY-3401
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.4.1.3
>            Reporter: Daniel John Debrunner
>            Assignee: Knut Anders Hatlen
>            Priority: Minor
>         Attachments: d3401-statement_events.diff, d3401-statement_events.stat
>
>
> A ConnectionEventListener should be able to remove itself as a listener 
> during a callback without affecting any other callbacks.
> DataSourceTest.subtestPooledRemoveListenerOnClose() tests the scenario but 
> calls to it will be commented out in the fixture testPooledReuseOnClose() 
> (using this bug number).
> Issue is that such a remove will modify the eventListener Vector in 
> EmbedPooledConnection while it is being enumerated over.
> An idea for a fix would be to first change the Vector over to a new-style 
> collection, such as an implementation of List, then work off a copy of the 
> collection when calling the callbacks. I don't think eventListener needs to 
> be a synchronized collection, its access should be already synchronized on 
> EmbedPooledConnection.
> I imagine that a similar issue exists for adding a new callback during 
> callback processing, fixing this bug would fix that issue as well though no 
> tests have been written for the add case.

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