Przeglądaj źródła

Fix some more issues with disposing Process instances

Mark Monteiro 5 lat temu
rodzic
commit
1f5caa46c5

+ 4 - 4
MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs

@@ -577,10 +577,10 @@ namespace MediaBrowser.MediaEncoding.Encoder
                 WindowStyle = ProcessWindowStyle.Hidden,
                 WindowStyle = ProcessWindowStyle.Hidden,
                 ErrorDialog = false,
                 ErrorDialog = false,
             };
             };
-            var process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true };
 
 
-            _logger.LogDebug("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
+            _logger.LogDebug("{0} {1}", processStartInfo.FileName, processStartInfo.Arguments);
 
 
+            var process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true };
             using (var processWrapper = new ProcessWrapper(process, this))
             using (var processWrapper = new ProcessWrapper(process, this))
             {
             {
                 bool ranToCompletion;
                 bool ranToCompletion;
@@ -706,14 +706,14 @@ namespace MediaBrowser.MediaEncoding.Encoder
                 WindowStyle = ProcessWindowStyle.Hidden,
                 WindowStyle = ProcessWindowStyle.Hidden,
                 ErrorDialog = false
                 ErrorDialog = false
             };
             };
-            var process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true };
 
 
-            _logger.LogInformation(process.StartInfo.FileName + " " + process.StartInfo.Arguments);
+            _logger.LogInformation(processStartInfo.FileName + " " + processStartInfo.Arguments);
 
 
             await _thumbnailResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
             await _thumbnailResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
 
 
             bool ranToCompletion = false;
             bool ranToCompletion = false;
 
 
+            var process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true };
             using (var processWrapper = new ProcessWrapper(process, this))
             using (var processWrapper = new ProcessWrapper(process, this))
             {
             {
                 try
                 try

+ 50 - 44
MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs

@@ -435,39 +435,42 @@ namespace MediaBrowser.MediaEncoding.Subtitles
                 WindowStyle = ProcessWindowStyle.Hidden,
                 WindowStyle = ProcessWindowStyle.Hidden,
                 ErrorDialog = false
                 ErrorDialog = false
             };
             };
-            var process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true };
-            process.Exited += (sender, args) => ((Process)sender).Dispose();
 
 
-            _logger.LogInformation("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
+            int exitCode;
 
 
-            try
-            {
-                process.Start();
-            }
-            catch (Exception ex)
+            using (var process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true })
             {
             {
-                _logger.LogError(ex, "Error starting ffmpeg");
-
-                throw;
-            }
+                _logger.LogInformation("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
 
 
-            var ranToCompletion = await process.WaitForExitAsync(TimeSpan.FromMinutes(5)).ConfigureAwait(false);
-
-            if (!ranToCompletion)
-            {
                 try
                 try
                 {
                 {
-                    _logger.LogInformation("Killing ffmpeg subtitle conversion process");
-
-                    process.Kill();
+                    process.Start();
                 }
                 }
                 catch (Exception ex)
                 catch (Exception ex)
                 {
                 {
-                    _logger.LogError(ex, "Error killing subtitle conversion process");
+                    _logger.LogError(ex, "Error starting ffmpeg");
+
+                    throw;
                 }
                 }
-            }
 
 
-            var exitCode = ranToCompletion ? process.ExitCode : -1;
+                var ranToCompletion = await process.WaitForExitAsync(TimeSpan.FromMinutes(5)).ConfigureAwait(false);
+
+                if (!ranToCompletion)
+                {
+                    try
+                    {
+                        _logger.LogInformation("Killing ffmpeg subtitle conversion process");
+
+                        process.Kill();
+                    }
+                    catch (Exception ex)
+                    {
+                        _logger.LogError(ex, "Error killing subtitle conversion process");
+                    }
+                }
+
+                exitCode = ranToCompletion ? process.ExitCode : -1;
+            }
 
 
             var failed = false;
             var failed = false;
 
 
@@ -583,39 +586,42 @@ namespace MediaBrowser.MediaEncoding.Subtitles
                 WindowStyle = ProcessWindowStyle.Hidden,
                 WindowStyle = ProcessWindowStyle.Hidden,
                 ErrorDialog = false
                 ErrorDialog = false
             };
             };
-            var process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true };
-            process.Exited += (sender, args) => ((Process)sender).Dispose();
 
 
-            _logger.LogInformation("{File} {Arguments}", process.StartInfo.FileName, process.StartInfo.Arguments);
+            int exitCode;
 
 
-            try
-            {
-                process.Start();
-            }
-            catch (Exception ex)
+            using (var process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true })
             {
             {
-                _logger.LogError(ex, "Error starting ffmpeg");
-
-                throw;
-            }
+                _logger.LogInformation("{File} {Arguments}", process.StartInfo.FileName, process.StartInfo.Arguments);
 
 
-            var ranToCompletion = await process.WaitForExitAsync(TimeSpan.FromMinutes(5)).ConfigureAwait(false);
-
-            if (!ranToCompletion)
-            {
                 try
                 try
                 {
                 {
-                    _logger.LogWarning("Killing ffmpeg subtitle extraction process");
-
-                    process.Kill();
+                    process.Start();
                 }
                 }
                 catch (Exception ex)
                 catch (Exception ex)
                 {
                 {
-                    _logger.LogError(ex, "Error killing subtitle extraction process");
+                    _logger.LogError(ex, "Error starting ffmpeg");
+
+                    throw;
                 }
                 }
-            }
 
 
-            var exitCode = ranToCompletion ? process.ExitCode : -1;
+                var ranToCompletion = await process.WaitForExitAsync(TimeSpan.FromMinutes(5)).ConfigureAwait(false);
+
+                if (!ranToCompletion)
+                {
+                    try
+                    {
+                        _logger.LogWarning("Killing ffmpeg subtitle extraction process");
+
+                        process.Kill();
+                    }
+                    catch (Exception ex)
+                    {
+                        _logger.LogError(ex, "Error killing subtitle extraction process");
+                    }
+                }
+
+                exitCode = ranToCompletion ? process.ExitCode : -1;
+            }
 
 
             var failed = false;
             var failed = false;