Преглед изворни кода

prevent cancellationtoken leakage

cvium пре 4 година
родитељ
комит
ba2e346d12

+ 3 - 1
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -661,7 +661,9 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
                 _modelCache.Clear();
             }
 
-            cancellationToken = CancellationTokenSource.CreateLinkedTokenSource(new CancellationTokenSource(discoveryDurationMs).Token, cancellationToken).Token;
+            using var timedCancellationToken = new CancellationTokenSource(discoveryDurationMs);
+            using var linkedCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(timedCancellationToken.Token, cancellationToken);
+            cancellationToken = linkedCancellationTokenSource.Token;
             var list = new List<TunerHostInfo>();
 
             // Create udp broadcast discovery message

+ 2 - 1
Emby.Server.Implementations/LiveTv/TunerHosts/LiveStream.cs

@@ -150,7 +150,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
 
         public async Task CopyToAsync(Stream stream, CancellationToken cancellationToken)
         {
-            cancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, LiveStreamCancellationTokenSource.Token).Token;
+            using var linkedCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, LiveStreamCancellationTokenSource.Token);
+            cancellationToken = linkedCancellationTokenSource.Token;
 
             // use non-async filestream on windows along with read due to https://github.com/dotnet/corefx/issues/6039
             var allowAsync = Environment.OSVersion.Platform != PlatformID.Win32NT;

+ 2 - 1
Jellyfin.Api/Helpers/ProgressiveFileCopier.cs

@@ -71,7 +71,8 @@ namespace Jellyfin.Api.Helpers
         /// <returns>A <see cref="Task"/>.</returns>
         public async Task WriteToAsync(Stream outputStream, CancellationToken cancellationToken)
         {
-            cancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, _cancellationToken).Token;
+            using var linkedCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, _cancellationToken);
+            cancellationToken = linkedCancellationTokenSource.Token;
 
             try
             {