[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