[jbossts-issues] [JBoss JIRA] Updated: (JBTM-851) Transaction timeout in JBoss caused deadlock with spring transaction manager

Tom Jenkinson (JIRA) jira-events at lists.jboss.org
Sun Sep 25 03:58:33 EDT 2011

     [ https://issues.jboss.org/browse/JBTM-851?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tom Jenkinson updated JBTM-851:

    Fix Version/s: 5.0.0.Final
                       (was: 5.0.0.M2)

> Transaction timeout in JBoss caused deadlock with spring transaction manager
> ----------------------------------------------------------------------------
>                 Key: JBTM-851
>                 URL: https://issues.jboss.org/browse/JBTM-851
>             Project: JBoss Transaction Manager
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: JTA
>    Affects Versions: 4.14.0
>         Environment: JBoss 6, JBoss TS 4.14.0.Final, Hibernate 3.6.4.Final, Spring 3.0.5
>            Reporter: Sergey Astakhov
>            Assignee: Tom Jenkinson
>            Priority: Critical
>             Fix For: 5.0.0.Final
>         Attachments: deadlock.txt
> Deadlock scenario:
> 1. Transaction started. At some point, jdbc connection allocated from poll and registered as transaction resource.
> 2. After timeout event occured, JBoss try to rollback this transaction.
> 3. In process of rolling back transaction, reaper process try to get lock on connection to do rollback and stopped at this point in waiting.
> 4. Due to cancelling state of the transaction, exception is rised in main process of transaction.
> 5. Spring catched this exception and invokes rollback to transaction.
> 6. Inside jboss transaction manager there is synchronized method for making transaction abort, so this rollback invocation is waiting another thread to complete.
> 7. At final: JBoss hold synchronized lock on abort method, but wait for releasing lock on connection. Main process hold lock on connection, but wait for releasing lock on abort method. Deadlock state.
> How this can be fixed:
> Before trying to invoke abort method, check transaction state. If it is already in state of aborting - just rise IllegalStateException.
> I'm also suggest to add similar check in spring code (https://jira.springsource.org/browse/SPR-8421), but such check should be in jboss code too, because any client code can suddenly get into this deadlock state.

This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jbossts-issues mailing list