Browse Source

Merge pull request #3360 from Bond-009/fix-3359

Fix Task that ignores cancellation request
dkanada 5 years ago
parent
commit
e8e5208fbd
1 changed files with 9 additions and 2 deletions
  1. 9 2
      Emby.Server.Implementations/Udp/UdpServer.cs

+ 9 - 2
Emby.Server.Implementations/Udp/UdpServer.cs

@@ -101,11 +101,18 @@ namespace Emby.Server.Implementations.Udp
         {
             while (!cancellationToken.IsCancellationRequested)
             {
+                var infiniteTask = Task.Delay(-1, cancellationToken);
                 try
                 {
-                    var result = await _udpSocket.ReceiveFromAsync(_receiveBuffer, SocketFlags.None, _endpoint).ConfigureAwait(false);
+                    var task = _udpSocket.ReceiveFromAsync(_receiveBuffer, SocketFlags.None, _endpoint);
+                    await Task.WhenAny(task, infiniteTask).ConfigureAwait(false);
 
-                    cancellationToken.ThrowIfCancellationRequested();
+                    if (!task.IsCompleted)
+                    {
+                        return;
+                    }
+
+                    var result = task.Result;
 
                     var text = Encoding.UTF8.GetString(_receiveBuffer, 0, result.ReceivedBytes);
                     if (text.Contains("who is JellyfinServer?", StringComparison.OrdinalIgnoreCase))