in src/Transport/Failover/FailoverTransport.cs [532:605]
public virtual void Stop()
{
ITransport transportToStop = null;
List<ITransport> backupsToStop = new List<ITransport>(backups.Count);
try
{
lock(reconnectMutex)
{
if(!started)
{
Tracer.Debug("FailoverTransport Already Stopped.");
return;
}
Tracer.Debug("FailoverTransport Stopped.");
started = false;
disposed = true;
connected = false;
if(ConnectedTransport != null)
{
transportToStop = connectedTransport.GetAndSet(null);
}
}
lock(sleepMutex)
{
Monitor.PulseAll(sleepMutex);
}
}
finally
{
if(reconnectTask != null)
{
reconnectTask.Shutdown();
}
}
lock(backupMutex)
{
foreach (BackupTransport backup in backups)
{
backup.Disposed = true;
ITransport transport = backup.Transport;
if (transport != null)
{
transport.CommandAsync = DisposedOnCommand;
transport.Exception = DisposedOnException;
backupsToStop.Add(transport);
}
}
backups.Clear();
}
foreach (ITransport transport in backupsToStop)
{
try
{
if (Tracer.IsDebugEnabled)
{
Tracer.Debug("Stopped backup: " + transport);
}
DisposeTransport(transport);
}
catch (Exception)
{
}
}
if(transportToStop != null)
{
transportToStop.Stop();
}
}