« Return to Thread: deadlock on com.swiftmq.tools.concurrent.Semaphore?

deadlock on com.swiftmq.tools.concurrent.Semaphore?

by Leoš Bitto :: Rate this Message:

Reply to Author | View in Thread

Hello,

we are using JBoss 4.0.5, Spring Framework 2.5.3 and SwiftMQ 6.2.1. We do not use org.springframework.jms.core.JmsTemplate because of the performance issues. I know that SwiftMQ 7.3 offers com.swiftmq.jms.springsupport.SingleSharedConnectionFactory - we do not use that. When using XA transactions with large objects (many aggregated messages processed together), this happens sometimes:

WARN  [TransactionImpl] XAException: tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=someserver.somedomain/580977207/153, BranchQual=, localId=153] errorCode=XA_UNKNOWN(0)
javax.transaction.xa.XAException: Request time out (70000) ms!
        at com.swiftmq.jms.v610.XAResourceImpl.end(Unknown Source)
        at org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2143)
        at org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2118)
        at org.jboss.tm.TransactionImpl.endResources(TransactionImpl.java:1462)
        at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1116)
        at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324)
        at org.jboss.tm.TxManager.commit(TxManager.java:240)
        at org.springframework.transaction.jta.UserTransactionAdapter.commit(UserTransactionAdapter.java:76)
        at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1028)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)

This is a part of the thread dump few moments before the exception occured:

"Thread_aoEngine_2" prio=1 tid=0xa6847240 nid=0x1465 in Object.wait() [0xa5357000..0xa5357eb0]
        at java.lang.Object.wait(Native Method)
        - waiting on <0xb3d78f58> (a com.swiftmq.tools.concurrent.Semaphore)
        at java.lang.Object.wait(Object.java:474)
        at com.swiftmq.tools.util.UninterruptableWaiter.doWait(Unknown Source)
        at com.swiftmq.tools.concurrent.Semaphore.waitHere(Unknown Source)
        - locked <0xb3d78f58> (a com.swiftmq.tools.concurrent.Semaphore)
        at com.swiftmq.tools.requestreply.RequestRegistry.request(Unknown Source)
        at com.swiftmq.jms.v610.SessionImpl.requestBlockable(Unknown Source)
        at com.swiftmq.jms.v610.XASessionImpl.request(Unknown Source)
        at com.swiftmq.jms.v610.XAResourceImpl.end(Unknown Source)
        - locked <0xb24decf0> (a com.swiftmq.jms.v610.XAResourceImpl)
        at org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2143)
        at org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2118)
        at org.jboss.tm.TransactionImpl.endResources(TransactionImpl.java:1462)
        at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1116)
        at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324)
        at org.jboss.tm.TxManager.commit(TxManager.java:240)
        at org.springframework.transaction.jta.UserTransactionAdapter.commit(UserTransactionAdapter.java:76)
        at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1028)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)

When we use smaller objects in the XA transactions, this error did not happen yet. Is there anything we could do to prevent this behaviour? I have no idea when, why and which thread is supposed to call notify on that com.swiftmq.tools.concurrent.Semaphore.

Thanks in advance for any hints.


Leoš Bitto

 « Return to Thread: deadlock on com.swiftmq.tools.concurrent.Semaphore?