public bool Iterate()
{
bool result = false;
bool buildBackup = true;
bool doReconnect = !parent.disposed && parent.connectionFailure == null;
try
{
parent.backupMutex.WaitOne();
if(parent.ConnectedTransport == null && doReconnect)
{
result = parent.DoConnect();
buildBackup = false;
}
}
finally
{
parent.backupMutex.ReleaseMutex();
}
if(buildBackup)
{
parent.BuildBackups();
}
else
{
//build backups on the next iteration
result = true;
try
{
parent.reconnectTask.Wakeup();
}
catch(ThreadInterruptedException)
{
Tracer.Debug("Reconnect task has been interrupted.");
}
}
return result;
}