Browse Source

Check before flushing ffmpeg log

The stream could have been diposed while writing.
Bond_009 6 years ago
parent
commit
d5f080fefb
1 changed files with 9 additions and 2 deletions
  1. 9 2
      MediaBrowser.Controller/MediaEncoding/JobLogger.cs

+ 9 - 2
MediaBrowser.Controller/MediaEncoding/JobLogger.cs

@@ -10,7 +10,7 @@ namespace MediaBrowser.Controller.MediaEncoding
 {
 {
     public class JobLogger
     public class JobLogger
     {
     {
-        private readonly CultureInfo _usCulture = new CultureInfo("en-US");
+        private static readonly CultureInfo _usCulture = CultureInfo.ReadOnly(new CultureInfo("en-US"));
         private readonly ILogger _logger;
         private readonly ILogger _logger;
 
 
         public JobLogger(ILogger logger)
         public JobLogger(ILogger logger)
@@ -24,7 +24,7 @@ namespace MediaBrowser.Controller.MediaEncoding
             {
             {
                 using (var reader = new StreamReader(source))
                 using (var reader = new StreamReader(source))
                 {
                 {
-                    while (!reader.EndOfStream)
+                    while (!reader.EndOfStream && reader.BaseStream.CanRead)
                     {
                     {
                         var line = await reader.ReadLineAsync().ConfigureAwait(false);
                         var line = await reader.ReadLineAsync().ConfigureAwait(false);
 
 
@@ -39,6 +39,13 @@ namespace MediaBrowser.Controller.MediaEncoding
                         }
                         }
 
 
                         await target.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
                         await target.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
+
+                        // Check again, the stream could have been closed
+                        if (!target.CanWrite)
+                        {
+                            break;
+                        }
+
                         await target.FlushAsync().ConfigureAwait(false);
                         await target.FlushAsync().ConfigureAwait(false);
                     }
                     }
                 }
                 }