Ver Fonte

Merge pull request #6523 from cvium/fix_livetv_cts_disposed

Bond-009 há 3 anos atrás
pai
commit
448125f2b4
1 ficheiros alterados com 6 adições e 3 exclusões
  1. 6 3
      Jellyfin.Api/Controllers/VideoHlsController.cs

+ 6 - 3
Jellyfin.Api/Controllers/VideoHlsController.cs

@@ -264,6 +264,9 @@ namespace Jellyfin.Api.Controllers
 
             // CTS lifecycle is managed internally.
             var cancellationTokenSource = new CancellationTokenSource();
+            // Due to CTS.Token calling ThrowIfDisposed (https://github.com/dotnet/runtime/issues/29970) we have to "cache" the token
+            // since it gets disposed when ffmpeg exits
+            var cancellationToken = cancellationTokenSource.Token;
             using var state = await StreamingHelpers.GetStreamingState(
                     streamingRequest,
                     Request,
@@ -278,7 +281,7 @@ namespace Jellyfin.Api.Controllers
                     _deviceManager,
                     _transcodingJobHelper,
                     TranscodingJobType,
-                    cancellationTokenSource.Token)
+                    cancellationToken)
                 .ConfigureAwait(false);
 
             TranscodingJobDto? job = null;
@@ -287,7 +290,7 @@ namespace Jellyfin.Api.Controllers
             if (!System.IO.File.Exists(playlistPath))
             {
                 var transcodingLock = _transcodingJobHelper.GetTranscodingLock(playlistPath);
-                await transcodingLock.WaitAsync(cancellationTokenSource.Token).ConfigureAwait(false);
+                await transcodingLock.WaitAsync(cancellationToken).ConfigureAwait(false);
                 try
                 {
                     if (!System.IO.File.Exists(playlistPath))
@@ -314,7 +317,7 @@ namespace Jellyfin.Api.Controllers
                         minSegments = state.MinSegments;
                         if (minSegments > 0)
                         {
-                            await HlsHelpers.WaitForMinimumSegmentCount(playlistPath, minSegments, _logger, cancellationTokenSource.Token).ConfigureAwait(false);
+                            await HlsHelpers.WaitForMinimumSegmentCount(playlistPath, minSegments, _logger, cancellationToken).ConfigureAwait(false);
                         }
                     }
                 }