]
RH Bugzilla Integration commented on JBJCA-1354:
------------------------------------------------
Jiří Bílek <jbilek(a)redhat.com> changed the Status of [bug
Potential for deadlock on pool's flush
--------------------------------------
Key: JBJCA-1354
URL:
https://issues.jboss.org/browse/JBJCA-1354
Project: IronJacamar
Issue Type: Bug
Reporter: Flavia Rainone
Assignee: Flavia Rainone
There is a potential for deadlock on all flushes in pools. The problem is that flush is
synchronized and inside the flush the code can be delegated to listeners, that are
external to IronJacamar.
If those listeners use their own synchronization system , they could require
synchronization locking in themselves. If there is another thread locking the listener and
at some point invoking an operation that results in a pool flush, the system could enter a
deadlock state.
An example of stack trace:
{noformat}
Found one Java-level deadlock:
=============================
"JMSCCThreadPoolWorker-18":
waiting to lock monitor 0x00007f1d2409ff48 (object 0x00000007853ad060, a
org.jboss.jca.core.connectionmanager.pool.strategy.OnePool),
which is held by "JMSCCThreadPoolWorker-16"
"JMSCCThreadPoolWorker-16":
waiting to lock monitor 0x00007f1d1c15d138 (object 0x0000000785998598, a
com.ibm.mq.connector.outbound.ConnectionEventHandler),
which is held by "JMSCCThreadPoolWorker-17"
"JMSCCThreadPoolWorker-17":
waiting to lock monitor 0x00007f1d2409ff48 (object 0x00000007853ad060, a
org.jboss.jca.core.connectionmanager.pool.strategy.OnePool),
which is held by "JMSCCThreadPoolWorker-16"
Java stack information for the threads listed above:
===================================================
"JMSCCThreadPoolWorker-18":
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.flush(AbstractPool.java:322)
- waiting to lock <0x00000007853ad060> (a
org.jboss.jca.core.connectionmanager.pool.strategy.OnePool)
at
org.jboss.jca.core.connectionmanager.listener.AbstractConnectionListener.connectionErrorOccurred(AbstractConnectionListener.java:368)
at
com.ibm.mq.connector.outbound.ConnectionEventHandler.fireEvent(ConnectionEventHandler.java:141)
- locked <0x0000000788fe1fa0> (a
com.ibm.mq.connector.outbound.ConnectionEventHandler)
at
com.ibm.mq.connector.outbound.ManagedConnectionImpl.onException(ManagedConnectionImpl.java:848)
at
com.ibm.msg.client.jms.internal.JmsProviderExceptionListener.run(JmsProviderExceptionListener.java:427)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:214)
at
com.ibm.msg.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:105)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:229)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:303)
at
com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$ThreadPoolWorker.run(WorkQueueManagerImplementation.java:1241)
"JMSCCThreadPoolWorker-16":
at
com.ibm.mq.connector.outbound.ConnectionEventHandler.removeListener(ConnectionEventHandler.java:93)
- waiting to lock <0x0000000785998598> (a
com.ibm.mq.connector.outbound.ConnectionEventHandler)
at
com.ibm.mq.connector.outbound.ManagedConnectionImpl.removeConnectionEventListener(ManagedConnectionImpl.java:434)
at
org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.doDestroy(SemaphoreArrayListManagedConnectionPool.java:891)
at
org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.flush(SemaphoreArrayListManagedConnectionPool.java:621)
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.flush(AbstractPool.java:330)
- locked <0x00000007853ad060> (a
org.jboss.jca.core.connectionmanager.pool.strategy.OnePool)
at
org.jboss.jca.core.connectionmanager.listener.AbstractConnectionListener.connectionErrorOccurred(AbstractConnectionListener.java:368)
at
com.ibm.mq.connector.outbound.ConnectionEventHandler.fireEvent(ConnectionEventHandler.java:141)
- locked <0x0000000788fe20b0> (a
com.ibm.mq.connector.outbound.ConnectionEventHandler)
at
com.ibm.mq.connector.outbound.ManagedConnectionImpl.onException(ManagedConnectionImpl.java:848)
at
com.ibm.msg.client.jms.internal.JmsProviderExceptionListener.run(JmsProviderExceptionListener.java:427)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:214)
at
com.ibm.msg.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:105)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:229)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:303)
at
com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$ThreadPoolWorker.run(WorkQueueManagerImplementation.java:1241)
"JMSCCThreadPoolWorker-17":
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.flush(AbstractPool.java:322)
- waiting to lock <0x00000007853ad060> (a
org.jboss.jca.core.connectionmanager.pool.strategy.OnePool)
at
org.jboss.jca.core.connectionmanager.listener.AbstractConnectionListener.connectionErrorOccurred(AbstractConnectionListener.java:368)
at
com.ibm.mq.connector.outbound.ConnectionEventHandler.fireEvent(ConnectionEventHandler.java:141)
- locked <0x0000000785998598> (a
com.ibm.mq.connector.outbound.ConnectionEventHandler)
at
com.ibm.mq.connector.outbound.ManagedConnectionImpl.onException(ManagedConnectionImpl.java:848)
at
com.ibm.msg.client.jms.internal.JmsProviderExceptionListener.run(JmsProviderExceptionListener.java:427)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:214)
at
com.ibm.msg.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:105)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:229)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:303)
at
com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$ThreadPoolWorker.run(WorkQueueManagerImplementation.java:1241)
{noformat}