You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Timothy Bish (JIRA)" <ji...@apache.org> on 2014/08/12 19:45:16 UTC

[jira] [Commented] (AMQNET-488) Deadlock in InactivityMonitor when using Failover

    [ https://issues.apache.org/jira/browse/AMQNET-488?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14094380#comment-14094380 ] 

Timothy Bish commented on AMQNET-488:
-------------------------------------

Reviewed and tested, looks good.  Patch applied on trunk and 1.6.x branch.

> Deadlock in InactivityMonitor when using Failover
> -------------------------------------------------
>
>                 Key: AMQNET-488
>                 URL: https://issues.apache.org/jira/browse/AMQNET-488
>             Project: ActiveMQ .Net
>          Issue Type: Bug
>          Components: ActiveMQ
>    Affects Versions: 1.6.2
>         Environment: ActiveMQ 5.10.0 on Windows Server 2012
> Apache.NMS.ActiveMQ 6.2 on .Net 4.5 + Windows 7
>            Reporter: Laurence Pike
>            Assignee: Jim Gomes
>            Priority: Critical
>         Attachments: AMQNET-488-CompositeTaskRunner.cs.patch, AMQNET-488-CompositeTaskRunnerTest.cs.patch
>
>
> Can occur when FailoverTransport is disposing the transport when the inactivity monitor fires. Deadlock between InactivityMonitor.monitor and CompositeTaskRunner.mutex.
> Stack traces for deadlock:
> mscorlib.dll!System.Threading.Monitor.Enter(object obj, ref bool lockTaken)	Unknown
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.InactivityMonitor.StopMonitorThreads() Line 381	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.InactivityMonitor.OnException(Apache.NMS.ActiveMQ.Transport.ITransport sender, System.Exception command) Line 310	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.Tcp.TcpTransport.Oneway(Apache.NMS.ActiveMQ.Commands.Command command) Line 146	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.InactivityMonitor.Oneway(Apache.NMS.ActiveMQ.Commands.Command command) Line 294	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.InactivityMonitor.AsyncWriteTask.Iterate() Line 474	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Threads.CompositeTaskRunner.Iterate() Line 194	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Threads.CompositeTaskRunner.Run() Line 149	C#
> mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state)	Unknown
> mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)	Unknown
> mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)	Unknown
> mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state)	Unknown
> mscorlib.dll!System.Threading.ThreadHelper.ThreadStart()	Unknown
> ============================================================================================================================
> mscorlib.dll!System.Threading.Monitor.Enter(object obj, ref bool lockTaken)	Unknown
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Threads.CompositeTaskRunner.RemoveTask(Apache.NMS.ActiveMQ.Threads.CompositeTask task) Line 65	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.InactivityMonitor.StopMonitorThreads() Line 401	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.InactivityMonitor.Stop() Line 223	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.TransportFilter.Stop() Line 196	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.Failover.FailoverTransport.DisposeTransport(Apache.NMS.ActiveMQ.Transport.ITransport transport) Line 1521	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.Failover.FailoverTransport.HandleTransportFailure(System.Exception e) Line 454	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.Failover.FailoverTransport.Oneway(Apache.NMS.ActiveMQ.Commands.Command command) Line 815	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.TransportFilter.Oneway(Apache.NMS.ActiveMQ.Commands.Command command) Line 82	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.MutexTransport.Oneway(Apache.NMS.ActiveMQ.Commands.Command command) Line 69	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Transport.ResponseCorrelator.Oneway(Apache.NMS.ActiveMQ.Commands.Command command) Line 54	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Connection.Oneway(Apache.NMS.ActiveMQ.Commands.Command command) Line 883	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Session.Session(Apache.NMS.ActiveMQ.Connection connection, Apache.NMS.ActiveMQ.Commands.SessionId sessionId, Apache.NMS.AcknowledgementMode acknowledgementMode) Line 72	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Connection.CreateActiveMQSession(Apache.NMS.AcknowledgementMode ackMode) Line 594	C#
> Apache.NMS.ActiveMQ.dll!Apache.NMS.ActiveMQ.Connection.CreateSession(Apache.NMS.AcknowledgementMode sessionAcknowledgementMode) Line 588	C#
> [Private code sending message in new session]



--
This message was sent by Atlassian JIRA
(v6.2#6252)