activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Timothy Bish (JIRA)" <jira+amq...@apache.org>
Subject [jira] Commented: (AMQNET-154) Closing a consumer does not unblock receive call
Date Mon, 30 Mar 2009 17:45:34 GMT

    [ 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.


Mime
View raw message