[rabbitmq-discuss] Java client 2.1.0 deadlock

Rob Harrop rob at rabbitmq.com
Thu Oct 14 14:38:10 BST 2010


It just got merged: http://hg.rabbitmq.com/rabbitmq-java-client/rev/599b3a8b5c1c

Regards,

Rob

On 14 Oct 2010, at 13:57, Rob Harrop wrote:

> Yes. This got accepted by QA today so I expect it will be in the next release of the client.
> 
> Rob
> 
> On 14 Oct 2010, at 09:09, mabrek wrote:
> 
>> Works for me, great thanks!
>> Are there any plans to merge it to default branch?
>> 
>> Regards,
>> Anton Lebedevich
>> 
>> On 10/12/2010 06:47 PM, Rob Harrop wrote:
>>> 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
>>> 
>> 
> 
> _______________________________________________
> 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