Costas Stergiou created ARTEMIS-3351:
----------------------------------------
Summary: MessageConsumer gets stuck indefinitely when session is
closed from management console
Key: ARTEMIS-3351
URL: https://issues.apache.org/jira/browse/ARTEMIS-3351
Project: ActiveMQ Artemis
Issue Type: Bug
Components: Broker
Affects Versions: 2.17.0
Environment: Using Artemis 2.17.0, out-of-the box installation,
default instance, clean install.
Reporter: Costas Stergiou
When a session is closed from the Management console (_Sessions_ tab -> _Close_
button), the consumer never gets notified.
Bug is reproducible with JMS and Core. It happens if the consumer loops in a
_receive(timeout)_ or _receiveNoWait()._ It also happens when the
_setMessageListener()_ has been called for callback-style reception.
To reproduce:
# create a consumer (JMS or Core)
# use a thread to loop indefinitely using _consumer.receive(1000);_
# create a producer, send messages, verify it all works
# from the Management Console, kill/close the session corresponding to the
consumer.
# The consumer.receive*() method never returns after the session is closed. If
using the _setMessageListener_() no more callbacks occur when new messages
arrive. No exception thrown whatsoever, nothing reported in
_connection.setExceptionListener()_
A quick look at the code show the thread waiting on this stack:
{code:java}
wait:-1, Object (java.lang)
receive:267, ClientConsumerImpl (org.apache.activemq.artemis.core.client.impl)
receiveImmediate:411, ClientConsumerImpl
(org.apache.activemq.artemis.core.client.impl)
getMessage:211, ActiveMQMessageConsumer (org.apache.activemq.artemis.jms.client)
receiveNoWait:139, ActiveMQMessageConsumer
(org.apache.activemq.artemis.jms.client)
lambda$createConsumer$0:74, ActiveMQCommon (com.imagetrust.activemq)
run:-1, ActiveMQCommon$$Lambda$15 (com.imagetrust.activemq)
call:511, Executors$RunnableAdapter (java.util.concurrent)
run:266, FutureTask (java.util.concurrent)
runWorker:1149, ThreadPoolExecutor (java.util.concurrent)
run:624, ThreadPoolExecutor$Worker (java.util.concurrent)
run:748, Thread (java.lang) {code}
Looks like _ClientConsumerImpl::receive_ waits indefinitely (or does an
indefinite loop) in line 267:
{code:java}
try {
wait(toWait); <<<
} catch (InterruptedException e) {
throw new ActiveMQInterruptedException(e);
} {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)