in src/Connection.cs [1326:1370]
protected void OnTransportInterrupted(ITransport sender)
{
Tracer.DebugFormat("Connection[{0}]: Transport has been Interrupted.", this.info.ConnectionId);
// Ensure that if there's an advisory consumer we don't add it to the
// set of consumers that need interruption processing.
Interlocked.Exchange(ref transportInterruptionProcessingComplete, 1);
if(Tracer.IsDebugEnabled)
{
Tracer.DebugFormat("Connection[{0}]: Transport interrupted, dispatchers: {1}", this.ConnectionId, dispatchers.Count);
}
foreach(Session session in this.sessions)
{
try
{
session.ClearMessagesInProgress(ref transportInterruptionProcessingComplete);
}
catch(Exception ex)
{
Tracer.WarnFormat("Connection[{0}]: Exception while clearing messages: {1}", this.ConnectionId, ex.Message);
Tracer.Warn(ex.StackTrace);
}
}
if (Interlocked.Decrement(ref transportInterruptionProcessingComplete) > 0)
{
Tracer.DebugFormat("Transport interrupted - processing required, dispatchers: {0}",
Interlocked.Read(ref transportInterruptionProcessingComplete));
SignalInterruptionProcessingNeeded();
}
if(this.ConnectionInterruptedListener != null && !this.closing.Value)
{
try
{
this.ConnectionInterruptedListener();
}
catch
{
}
}
}