2
0
Эх сурвалжийг харах

Make sure Process objects are all disposed correctly

Mark Monteiro 5 жил өмнө
parent
commit
7447ea8960

+ 10 - 3
Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs

@@ -290,9 +290,11 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         /// </summary>
         private void OnFfMpegProcessExited(Process process, string inputFile)
         {
-            _hasExited = true;
+            try
+            {
+                _hasExited = true;
 
-            _logFileStream?.Dispose();
+                _logFileStream?.Dispose();
                 _logFileStream = null;
 
                 var exitCode = process.ExitCode;
@@ -311,7 +313,12 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                                 CultureInfo.InvariantCulture,
                                 "Recording for {0} failed. Exit code {1}",
                                 _targetPath,
-                            exitCode)));
+                                exitCode)));
+                }
+            }
+            finally
+            {
+                process.Dispose();
             }
         }
 

+ 2 - 4
MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs

@@ -436,6 +436,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
                 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);
 
@@ -468,8 +469,6 @@ namespace MediaBrowser.MediaEncoding.Subtitles
 
             var exitCode = ranToCompletion ? process.ExitCode : -1;
 
-            process.Dispose();
-
             var failed = false;
 
             if (exitCode == -1)
@@ -585,6 +584,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
                 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);
 
@@ -617,8 +617,6 @@ namespace MediaBrowser.MediaEncoding.Subtitles
 
             var exitCode = ranToCompletion ? process.ExitCode : -1;
 
-            process.Dispose();
-
             var failed = false;
 
             if (exitCode == -1)