[prev in list] [next in list] [prev in thread] [next in thread]
List: activemq-dev
Subject: [jira] Commented: (AMQNET-154) Closing a consumer does not unblock
From: "Timothy Bish (JIRA)" <jira+amqnet () apache ! org>
Date: 2009-03-30 17:45:34
Message-ID: 68693961.1238435134875.JavaMail.jira () brutus
[Download RAW message or body]
[ https://issues.apache.org/activemq/browse/AMQNET-154?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=50903#action_50903 \
]
Timothy Bish commented on AMQNET-154:
-------------------------------------
This looks to be a simple bug in the Dispatcher used by consumers, the close method \
looks as follows:
{noformat}
public void Close()
{
lock (semaphore)
{
m_bClosed = true;
queue.Clear();
if(m_bAsyncDelivery)
{
messageReceivedEventHandle.Set();
}
}
}
{noformat}
I think the if statement there should be:
{noformat}
if(!m_bAsyncDelivery)
{
messageReceivedEventHandle.Set();
}
{noformat}
Since the async delivery case only needs to trigger an event when a message arrives \
whereas the sync delivery case needs to trigger a wakeup on close for any waiting \
consumers.
> Closing a consumer does not unblock receive call
> ------------------------------------------------
>
> Key: AMQNET-154
> URL: https://issues.apache.org/activemq/browse/AMQNET-154
> Project: ActiveMQ .Net
> Issue Type: Bug
> Components: ActiveMQ Client
> Affects Versions: 1.1
> Environment: windows xp profesional
> Reporter: Marco Crivellaro
> Assignee: Jim Gomes
>
> calling the close method of a cosumer while this has a pending receive call blocked \
> does not unblock returning null. sample code (C#)
> using System;
> using Apache.NMS;
> using Apache.NMS.ActiveMQ;
> using System.Threading;
> namespace simpleConsumer
> {
> class Program
> {
> private static bool _exit = false;
> private static IMessageConsumer _consumer;
>
> static void Main(string[] args)
> {
> Apache.NMS.ActiveMQ.ConnectionFactory connectionFactory = new \
> ConnectionFactory("tcp://172.18.141.102:61616"); Apache.NMS.IConnection connection \
> = connectionFactory.CreateConnection(); connection.Start();
> Apache.NMS.ISession session = connection.CreateSession();
> Apache.NMS.ActiveMQ.Commands.ActiveMQTopic inputTopic = new \
> Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("test.topic"); _consumer = \
> session.CreateConsumer(inputTopic, "2>1"); Thread _receiveThread = new \
> Thread(_receiveLoop); _receiveThread.Start();
> while (!_exit)
> {
> String command = Console.ReadLine();
> if (command == "exit")
> {
> _exit = true;
> }
> }
> _consumer.Close();
> _receiveThread.Join();
> }
> private static void _receiveLoop()
> {
> while (!_exit)
> {
> Apache.NMS.ActiveMQ.Commands.ActiveMQTextMessage message = \
> (Apache.NMS.ActiveMQ.Commands.ActiveMQTextMessage)_consumer.Receive(); \
> Console.WriteLine(message.Content.ToString() + " [looping...]"); }
> }
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic