diff options
| author | Bond_009 <bond.009@outlook.com> | 2021-11-18 14:13:43 +0100 |
|---|---|---|
| committer | Bond_009 <bond.009@outlook.com> | 2022-01-07 11:24:36 +0100 |
| commit | 3ab0afdc6bf7474df6fb2ce0af7a96f58b2bdcd3 (patch) | |
| tree | b0a2f1962f6675b8cb6129367487702795af6642 /Emby.Server.Implementations/LiveTv | |
| parent | 98962cc21ff0a214070127cb211a77f5983c62c1 (diff) | |
Remove task cancellation hacks
Diffstat (limited to 'Emby.Server.Implementations/LiveTv')
| -rw-r--r-- | Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs | 48 |
1 files changed, 18 insertions, 30 deletions
diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs index 9ed0d8d73..a5edd35cc 100644 --- a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs @@ -165,7 +165,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun { await CopyTo(udpClient, TempFilePath, openTaskCompletionSource, cancellationToken).ConfigureAwait(false); } - catch (OperationCanceledException ex) + catch (Exception ex) when (ex is OperationCanceledException || ex is TimeoutException) { Logger.LogInformation("HDHR UDP stream cancelled or timed out from {0}", remoteAddress); openTaskCompletionSource.TrySetException(ex); @@ -191,36 +191,24 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun while (true) { cancellationToken.ThrowIfCancellationRequested(); - using (var timeOutSource = new CancellationTokenSource()) - using (var linkedSource = CancellationTokenSource.CreateLinkedTokenSource( - cancellationToken, - timeOutSource.Token)) + var res = await udpClient.ReceiveAsync(cancellationToken) + .AsTask() + .WaitAsync(TimeSpan.FromMilliseconds(30000), CancellationToken.None) + .ConfigureAwait(false); + var buffer = res.Buffer; + + var read = buffer.Length - RtpHeaderBytes; + + if (read > 0) + { + await fileStream.WriteAsync(buffer.AsMemory(RtpHeaderBytes, read), cancellationToken).ConfigureAwait(false); + } + + if (!resolved) { - var resTask = udpClient.ReceiveAsync(linkedSource.Token).AsTask(); - if (await Task.WhenAny(resTask, Task.Delay(30000, linkedSource.Token)).ConfigureAwait(false) != resTask) - { - resTask.Dispose(); - break; - } - - // We don't want all these delay tasks to keep running - timeOutSource.Cancel(); - var res = await resTask.ConfigureAwait(false); - var buffer = res.Buffer; - - var read = buffer.Length - RtpHeaderBytes; - - if (read > 0) - { - await fileStream.WriteAsync(buffer.AsMemory(RtpHeaderBytes, read), linkedSource.Token).ConfigureAwait(false); - } - - if (!resolved) - { - resolved = true; - DateOpened = DateTime.UtcNow; - openTaskCompletionSource.TrySetResult(true); - } + resolved = true; + DateOpened = DateTime.UtcNow; + openTaskCompletionSource.TrySetResult(true); } } } |
