[jbossts-issues] [JBoss JIRA] (JBTM-770) incorrect cleanup registration causes memory leak

Jonathan Halliday (Commented) (JIRA) jira-events at lists.jboss.org
Tue Nov 29 13:05:42 EST 2011


    [ https://issues.jboss.org/browse/JBTM-770?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12646418#comment-12646418 ] 

Jonathan Halliday commented on JBTM-770:
----------------------------------------

IIRC mark's original 'fix' on trunk was buggy. I fixed the backport version on the fly, but mark took two subsequent attempts to apply the same fix to trunk.  Take the patch using the single commit on the 4.6.1 branch as your source, that single change set should be equivalent to applying all three of the trunk changes in order.
                
> incorrect cleanup registration causes memory leak
> -------------------------------------------------
>
>                 Key: JBTM-770
>                 URL: https://issues.jboss.org/browse/JBTM-770
>             Project: JBoss Transaction Manager
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: JTS
>    Affects Versions: 4.12.0, 4.6.1.CP06
>            Reporter: Jonathan Halliday
>            Assignee: Jonathan Halliday
>             Fix For: 4.13.0, 4.6.1.CP08
>
>
> jts.TransactionImple constructors attempt to optimize the cleanup callback needed to remove entries from _transactions, bypassing the ORB for interposition scenarios:
> theTx = (TwoPhaseCoordinator) BasicAction.Current();
> if (theTx != null) {
>   theTx.addSynchronization(new LocalCleanupSynchronization(this));
> } else {
>   registerSynchronization(new CleanupSynchronization(this));
> }
> Unfortunately this does not work and leads to memory leaks on _transactions in certain cases. Specifically, where theTx is a ServerTransaction (i.e. extends ArjunaTransactionImple, which extends TwoPhaseCoordinator), the callbacks run (by ArjunaTransactionImple.do[Before|After]Completion()) are those in ArjunaTransactionImple._syncs, not the masked ones in TwoPhaseCoordinator._syncs. Thus using TwoPhaseCoordinator.addSynchronization registers a callback which is never invoked.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jbossts-issues mailing list