[rabbitmq-discuss] Java client 2.1.0 deadlock
Rob Harrop
rob at rabbitmq.com
Tue Oct 12 15:47:18 BST 2010
Anton,
I just pushed a fix for this issue on branch bug23360:
http://hg.rabbitmq.com/rabbitmq-java-client/rev/83a89cdc53aa
Let me know if this works for you.
Regards,
Rob
On 12 Oct 2010, at 15:03, mabrek wrote:
> Hello.
> I've got reproducible deadlock while working with java client 2.1.0.
>
> Steps to follow:
> 1) create connection
> 2) create several threads that use single connection from step 1. Each
> thread does:
> 2.1) create channel
> 2.2) consumes from non-existing queue
> 3) run all threads in parallel.
> It will hang up.
>
> One thread holds lock on ChannelManager:
> "pool-1-thread-3" prio=10 tid=0x00007f74640e2000 nid=0x4667 in
> Object.wait() [0x00007f7463ffe000]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x00007f747339bbe8> (a
> com.rabbitmq.utility.BlockingValueOrException)
> at java.lang.Object.wait(Object.java:485)
> at com.rabbitmq.utility.BlockingCell.get(BlockingCell.java:64)
> - locked <0x00007f747339bbe8> (a com.rabbitmq.utility.BlockingValueOrException)
> at com.rabbitmq.utility.BlockingCell.uninterruptibleGet(BlockingCell.java:103)
> - locked <0x00007f747339bbe8> (a com.rabbitmq.utility.BlockingValueOrException)
> at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:47)
> at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:342)
> at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:215)
> at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:139)
> at com.rabbitmq.client.impl.ChannelN.open(ChannelN.java:125)
> at com.rabbitmq.client.impl.ChannelManager.createChannelInternal(ChannelManager.java:121)
> - locked <0x00007f7473af80c8> (a com.rabbitmq.client.impl.ChannelManager)
> at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:100)
> - locked <0x00007f7473af80c8> (a com.rabbitmq.client.impl.ChannelManager)
> at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:382)
>
> AMQP connection waits for this lock to handle Channel.Close(NOT_FOUND)
> "AMQP Connection localhost:5672" prio=10 tid=0x00007f7464287800
> nid=0x4675 waiting for monitor entry [0x00007f74631f0000]
> java.lang.Thread.State: BLOCKED (on object monitor)
> at com.rabbitmq.client.impl.ChannelManager.disconnectChannel(ChannelManager.java:135)
> - waiting to lock <0x00007f7473af80c8> (a
> com.rabbitmq.client.impl.ChannelManager)
> at com.rabbitmq.client.impl.AMQConnection.disconnectChannel(AMQConnection.java:130)
> at com.rabbitmq.client.impl.ChannelN.releaseChannelNumber(ChannelN.java:205)
> at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:229)
> at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:165)
> at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:110)
> at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:434)
> Locked ownable synchronizers:
> - None
>
> All other threads wait for this lock:
> "pool-6-thread-1" prio=10 tid=0x00007f74642d4800 nid=0x4698 waiting
> for monitor entry [0x00007f7460ecd000]
> java.lang.Thread.State: BLOCKED (on object monitor)
> at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:96)
> - waiting to lock <0x00007f7473af80c8> (a
> com.rabbitmq.client.impl.ChannelManager)
> at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:382)
>
> It looks like something was done around this issue at branch bug22064,
> but it haven't merged into default yet and it's quite old. Do you have
> any plans to use more fine grained locking in ChannelManager?
>
> Regards,
> Anton Lebedevich.
> _______________________________________________
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
> https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
More information about the rabbitmq-discuss
mailing list