You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Jim Gomes (JIRA)" <ji...@apache.org> on 2009/05/22 19:49:50 UTC

[jira] Resolved: (AMQNET-136) DEADLOCK while closing the consumer

     [ https://issues.apache.org/activemq/browse/AMQNET-136?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jim Gomes resolved AMQNET-136.
------------------------------

    Resolution: Cannot Reproduce

A related fix was put in for [AMQNET-132].  Would you please re-test with the latest code to see if this solves your problem.  Also, a running sample of code that can reproduce the problem (if it still exists) would be very helpful in resolving this issue.


> DEADLOCK  while closing the consumer
> ------------------------------------
>
>                 Key: AMQNET-136
>                 URL: https://issues.apache.org/activemq/browse/AMQNET-136
>             Project: ActiveMQ .Net
>          Issue Type: Bug
>          Components: ActiveMQ Client
>    Affects Versions: 1.1
>         Environment: windows XP machine. Using .net 3.5 and VS 2008
>            Reporter: satya
>            Assignee: Jim Gomes
>             Fix For: 1.1
>
>
> DEADLOCK SCENARIO:
> the deadlock occurs on close method of IMessageConsumer. 
> Here is the scenario... 
> Lets say we have the class below. The producer is calling the MessgeConsumers callback method. 
> In this case its onMessage() method. Now lets assume there are 30K messages to be received in the call back. When we are on the 10th message and the user closes the trace Window the CloseWindow() method is called and the application stalls at the message consumers close method. 
> Hope I am clear enough. 
> Class TraceWindow 
> { 
> private IMessageConsumer consumerTrace = null; 
> TraceWindow(Apache.NMS.IMessageConsumer iMessageConsumer) 
> { 
>             this.consumerTrace = iMessageConsumer; 
>             if (consumerTrace != null) 
>             { 
>                 this.consumerTrace.Listener += new MessageListener(OnMessage); 
>             } 
> } 
>  public void OnMessage(Apache.NMS.IMessage bMsg) 
> { 
>         //inserts in WPF ObservableCollection 
>             handleMessageDelegate Updater = new handleMessageDelegate(handleMessage); 
>             this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input, 
>                      Updater, obj);       
> } 
> public void handleMessage(Object item) 
>         {                         
>             lock (collectionTrace) 
>             {   
>                 {                     
>                     collectionTrace.Add(item); 
>                     LogManager.GetLogger("AlgoSystemCommunicatorLogger").Info(item);     
>                 } 
>             } 
>         }       
> public void CloseWindow() 
> { 
>    consumerTrace.Close();   //////////////////////SYSTEM STALLS ON THIS CALL 
> } 
> }//end of class 
> A WORK AROUND THAT I HAVE found is as follows:
> Before closing the consumer created on an ITemporaryTopic I call the 
> DeleteDestination(IDestination destination) method to delete the temporary topic.
> I then call the close method on the consumer and it works. If however I dont call the deleteDestination method above
> there is a deadlock and the system stall. Just to add I have around 30000+ messages coming over the callback method for the consumer.
> Not sure if the number of messages causes this.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.