[
https://issues.apache.org/activemq/browse/AMQ-2446?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=63449#action_63449
]
Adrian Lisenberg commented on AMQ-2446:
---------------------------------------
Hi, I am using 5.4.1 and still have the same situation. I use prefetch=0,
failover and connection pool.
Sometimes when I call receive(1000), the consumer hangs at this line:
org.apache.activemq.SimplePriorityMessageDispatchChannel.dequeue(SimplePriorityMessageDispatchChannel.java:87)
org.apache.activemq.ActiveMQMessageConsumer.dequeue(ActiveMQMessageConsumer.java:452)
It's very difficult to reproduce with a test case.
thanks,
adrian
> Client hangs on receive call with timeout value > 0 when activemq is shutdown
> (CTRL-C)
> --------------------------------------------------------------------------------------
>
> Key: AMQ-2446
> URL: https://issues.apache.org/activemq/browse/AMQ-2446
> Project: ActiveMQ
> Issue Type: Bug
> Affects Versions: 5.2.0
> Environment: Windows XP SP3, ActiveMQ 5.2, prefetchSize=0
> (java.naming.provider.url =
> tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=0)
> Reporter: Carl Allain
> Assignee: Gary Tully
> Fix For: 5.3.0
>
> Attachments: AMQ-2446-Test.zip, AMQ2446Test.java
>
>
> Start ActiveMQ
> create a message consumer and make a receive(30000) call for example.
> stop ActiveMQ (CTRL-C)
> There is an error reported on the console:
> 2009-10-08 19:23:54,978 [ActiveMQ Transport: tcp://localhost/127.0.0.1:61616]
> DEBUG org.apache.activemq.ActiveMQConnection - Async exception with no
> exception listener: java.io.EOFException
> java.io.EOFException
> at java.io.DataInputStream.readInt(DataInputStream.java:358)
> at
> org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:269)
> at
> org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:210)
> at
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:202)
> at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
> at java.lang.Thread.run(Thread.java:595)
> 2009-10-08 19:23:54,978 [ActiveMQ Connection Worker:
> tcp://localhost/127.0.0.1:61616] DEBUG
> org.apache.activemq.transport.tcp.TcpTransport - Stopping transport
> tcp://localhost/127.0.0.1:61616
> The thread making the receive call is waiting on a mutex that the ActiveMQ
> Connection Worker thread that reported that log has (I guess):
> class MessageDispatchChannel
> public MessageDispatch dequeue(long timeout) throws InterruptedException {
> synchronized (mutex) {
> // Wait until the consumer is ready to deliver messages.
> while (timeout != 0 && !closed && (list.isEmpty() || !running)) {
> if (timeout == -1) {
> mutex.wait();
> <-----------------------------------------------------------
> } else {
> mutex.wait(timeout);
> break;
> }
> }
> if (closed || !running || list.isEmpty()) {
> return null;
> }
> return list.removeFirst();
> }
> }
> What is also strange to me is that my timeout of 30000 ms is silently
> converted to an infinite timeout if the preFetchSize == 0 by this code? Why?
> class ActiveMQMessageConsumer
> ...
> MessageDispatch md;
> if (info.getPrefetchSize() == 0) {
> md = dequeue(-1); // We let the broker let us know when we
> // timeout.
> } else {
> md = dequeue(timeout);
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.