2014-03-10 05:35:50 +00:00
|
|
|
|
using System.Threading;
|
2014-10-03 05:24:32 +00:00
|
|
|
|
using NLog;
|
2014-03-10 05:35:50 +00:00
|
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
|
|
|
|
using NzbDrone.Common.Processes;
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Host
|
|
|
|
|
{
|
|
|
|
|
public interface IWaitForExit
|
|
|
|
|
{
|
|
|
|
|
void Spin();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class SpinService : IWaitForExit
|
|
|
|
|
{
|
|
|
|
|
private readonly IRuntimeInfo _runtimeInfo;
|
|
|
|
|
private readonly IProcessProvider _processProvider;
|
2014-10-03 05:24:32 +00:00
|
|
|
|
private readonly Logger _logger;
|
2014-03-10 05:35:50 +00:00
|
|
|
|
|
2014-10-03 05:24:32 +00:00
|
|
|
|
public SpinService(IRuntimeInfo runtimeInfo, IProcessProvider processProvider, Logger logger)
|
2014-03-10 05:35:50 +00:00
|
|
|
|
{
|
|
|
|
|
_runtimeInfo = runtimeInfo;
|
|
|
|
|
_processProvider = processProvider;
|
2014-10-03 05:24:32 +00:00
|
|
|
|
_logger = logger;
|
2014-03-10 05:35:50 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Spin()
|
|
|
|
|
{
|
|
|
|
|
while (_runtimeInfo.IsRunning)
|
|
|
|
|
{
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-03 05:24:32 +00:00
|
|
|
|
_logger.Debug("wait loop was terminated.");
|
|
|
|
|
|
2014-03-10 05:35:50 +00:00
|
|
|
|
if (_runtimeInfo.RestartPending)
|
|
|
|
|
{
|
2014-10-03 05:24:32 +00:00
|
|
|
|
_logger.Info("attemptig restart.");
|
2014-03-10 05:35:50 +00:00
|
|
|
|
_processProvider.SpawnNewProcess(_runtimeInfo.ExecutingApplication, "--restart --nobrowser");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|