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.0.0
Reporter: Daniel John Debrunner
Priority: Minor
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.