[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