[jbossts-issues] [JBoss JIRA] Updated: (JBTM-789) XA connections leak when no modifier available
Mauro Molinari (JIRA)
jira-events at lists.jboss.org
Tue Oct 12 04:45:39 EDT 2010
[ https://jira.jboss.org/browse/JBTM-789?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mauro Molinari updated JBTM-789:
Attachment: Patch JBTM-789.txt
This is my proposed patch, based on the discussion in the forum topic.
The patch applies to com.arjuna.ats.internal.jdbc.ConnectionImple.close() and the semantic is the following.
First of all, both connections (the physical one and the recovery one) are always closed together. To ensure this, I created a private closeConnectionsImmediately() method which is called wherever needed.
If the transaction is not active, close the connections immediately.
Otherwise, check if the transaction is valid. If it is not, close the connections immediately and launch an "invalid transaction" exception.
Otherwise (so, there's a valid transaction), try to delist the resource. In case of errors launch an exception. However, in any case, a finally block is executed in which the following check is performed. If we DO have a ConnectionModifier AND it says that the JDBC driver does not support multiple connections, then close immediately. In all the other cases, just register a transaction synchronization to close the connections after transaction termination. This is all done in a finally block, otherwise a connection leak may occur if something goes wrong (i.e.: if the delist of resources fails).
I hope this can help in some way.
> XA connections leak when no modifier available
> Key: JBTM-789
> URL: https://jira.jboss.org/browse/JBTM-789
> Project: JBoss Transaction Manager
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: JTA
> Affects Versions: 4.11.0
> Environment: JBoss Transactions 4.11, Tomcat, Spring
> Reporter: Mauro Molinari
> Assignee: Mark Little
> Priority: Critical
> Attachments: Patch JBTM-789.txt
> I recently upgraded JBossTS from 4.6.1 GA to 4.11 Final. I see that bug JBTM-532 that I opened against 4.5 and 4.6 should have been fixed in 4.8.0. However, besides still having a null _theModifier when using PostgreSQL, the current (4.11) implementation of com.arjuna.ats.internal.jdbc.ConnectionImple.close() has a problem.
> I mean, if _theModifier is null, a comment says: "no indication about connections, so assume close immediately". However in this case only _theConnection (java.sql.Connection) is closed and set to null, while _recoveryConnection.closeCloseCurrentConnection() is not called, leading to an XAConnection leak.
> What I would expect is that if _theModifier is null, a log entry were added but nothing else were done; in particular I would expect not to return and let the following "if (!delayClose)" (towards the end of the method) close both the connections immediately.
This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jbossts-issues