[rabbitmq-discuss] Java client 2.1.0 deadlock
Rob Harrop
rob at rabbitmq.com
Thu Oct 14 13:57:36 BST 2010
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
>>
>
More information about the rabbitmq-discuss
mailing list