Took a look at the build hangs that have been occurring. I've captured multiple
thread dumps. They all look pretty similar to the following:
"VMTransport" daemon prio=5 tid=0x0000000102384800 nid=0x12011f000 waiting for
monitor entry [0x000000012011e000]
java.lang.Thread.State: BLOCKED (on object monitor)
at
org.apache.activemq.ra.ActiveMQEndpointWorker.getConnection(ActiveMQEndpointWorker.java:281)
- waiting to lock <0x0000000106102000> (a
org.apache.activemq.ra.ActiveMQEndpointWorker$1)
at
org.apache.activemq.ra.ServerSessionPoolImpl.createServerSessionImpl(ServerSessionPoolImpl.java:63)
at
org.apache.activemq.ra.ServerSessionPoolImpl.getServerSession(ServerSessionPoolImpl.java:109)
at
org.apache.activemq.ActiveMQConnectionConsumer.dispatch(ActiveMQConnectionConsumer.java:135)
at
org.apache.activemq.ActiveMQConnection.onCommand(ActiveMQConnection.java:1485)
at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:95)
at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:65)
at
org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:201)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:120)
at
org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:26)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:637)
"Default JMS Resource Adapter-worker-1" daemon prio=5 tid=0x000000010236f800
nid=0x11fe16000 in Object.wait() [0x000000011fe15000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000001067a4ba0> (a
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar)
at java.lang.Object.wait(Object.java:485)
at
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar.await(CondVar.java:75)
- locked <0x00000001067a4ba0> (a
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar)
at
edu.emory.mathcs.backport.java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:318)
at
org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:42)
at
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:75)
at
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1175)
at
org.apache.activemq.ActiveMQConnectionConsumer.<init>(ActiveMQConnectionConsumer.java:85)
at
org.apache.activemq.ActiveMQConnection.createConnectionConsumer(ActiveMQConnection.java:1085)
at
org.apache.activemq.ra.ActiveMQEndpointWorker$1.run(ActiveMQEndpointWorker.java:166)
- locked <0x0000000106102000> (a
org.apache.activemq.ra.ActiveMQEndpointWorker$1)
at
org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:290)
at
org.apache.geronimo.connector.work.pool.NamedRunnable.run(NamedRunnable.java:32)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
I believe the "VMTransport" thread is waiting for a lock held by the "Default
JMS Resource Adapter-worker-1". I believe that "Default JMS Resource
Adapter-worker-1" is waiting for a response from the "VMTransport" thread. So,
we're basically in a deadlock.
I only see the problem on AMQ 4.1.2. If I revert back to 4.1.1, I'm not seeing
the problem. I diffed 4.1.1 and 4.1.2, but don't see an obvious cause. Given
that openejb-activemq4 is only in for migration purposes, I think we should
simply revert back to 4.1.1. If anyone is interested in digging into this
further, please feel free!
--kevan