From 7d4a514a68d8490650441009cd18d39b00785319 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 13 Feb 2014 18:18:11 -0800 Subject: [PATCH] Changed how running a process and waiting for exit is handled --- .../Processes/ProcessProvider.cs | 9 ++------- src/NzbDrone.Mono/NzbDroneProcessProvider.cs | 20 +++++++++++++++---- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs index e36c86691..d1c4774e5 100644 --- a/src/NzbDrone.Common/Processes/ProcessProvider.cs +++ b/src/NzbDrone.Common/Processes/ProcessProvider.cs @@ -179,9 +179,7 @@ namespace NzbDrone.Common.Processes public ProcessOutput StartAndCapture(string path, string args = null) { var output = new ProcessOutput(); - var process = Start(path, args, s => output.Standard.Add(s), error => output.Error.Add(error)); - - WaitForExit(process); + Start(path, args, s => output.Standard.Add(s), error => output.Error.Add(error)).WaitForExit(); return output; } @@ -190,10 +188,7 @@ namespace NzbDrone.Common.Processes { Logger.Trace("Waiting for process {0} to exit.", process.ProcessName); - if (!process.HasExited) - { - process.WaitForExit(); - } + process.WaitForExit(); } public void SetPriority(int processId, ProcessPriorityClass priority) diff --git a/src/NzbDrone.Mono/NzbDroneProcessProvider.cs b/src/NzbDrone.Mono/NzbDroneProcessProvider.cs index 79a2b3579..1804c077d 100644 --- a/src/NzbDrone.Mono/NzbDroneProcessProvider.cs +++ b/src/NzbDrone.Mono/NzbDroneProcessProvider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NLog; using NzbDrone.Common.Model; using NzbDrone.Common.Processes; @@ -9,10 +10,12 @@ namespace NzbDrone.Mono public class NzbDroneProcessProvider : INzbDroneProcessProvider { private readonly IProcessProvider _processProvider; + private readonly Logger _logger; - public NzbDroneProcessProvider(IProcessProvider processProvider) + public NzbDroneProcessProvider(IProcessProvider processProvider, Logger logger) { _processProvider = processProvider; + _logger = logger; } public List FindNzbDroneProcesses() @@ -21,10 +24,19 @@ namespace NzbDrone.Mono return monoProcesses.Where(c => { - var processArgs = _processProvider.StartAndCapture("ps", String.Format("-p {0} -o args=", c.Id)); + try + { + var processArgs = _processProvider.StartAndCapture("ps", String.Format("-p {0} -o args=", c.Id)); - return processArgs.Standard.Any(p => p.Contains(ProcessProvider.NZB_DRONE_PROCESS_NAME + ".exe") || - p.Contains(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME + ".exe")); + return processArgs.Standard.Any(p => p.Contains(ProcessProvider.NZB_DRONE_PROCESS_NAME + ".exe") || + p.Contains(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME + ".exe")); + } + catch (InvalidOperationException ex) + { + _logger.WarnException("Error getting process arguments", ex); + return false; + } + }).ToList(); } }