[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