From 98d9f5d2c8664b19707907d1a7ca4863ec3e396a Mon Sep 17 00:00:00 2001 From: Forest Date: Wed, 25 Aug 2021 12:41:32 -0700 Subject: [PATCH] Interestingly, SelectRead doesn't always return when you shut down, so some platforms will hang while disposing ThreadLimitedListeners. Fixed by polling for 1s, seems fine. --- .../FewerThreads/ThreadLimitedUdpConnectionListener.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Hazel/FewerThreads/ThreadLimitedUdpConnectionListener.cs b/Hazel/FewerThreads/ThreadLimitedUdpConnectionListener.cs index e604765..3053363 100644 --- a/Hazel/FewerThreads/ThreadLimitedUdpConnectionListener.cs +++ b/Hazel/FewerThreads/ThreadLimitedUdpConnectionListener.cs @@ -211,8 +211,10 @@ namespace Hazel.Udp.FewerThreads { while (this.isActive) { - if (this.socket.Poll(Timeout.Infinite, SelectMode.SelectRead)) + if (this.socket.Poll(1000, SelectMode.SelectRead)) { + if (!isActive) break; + EndPoint remoteEP = new IPEndPoint(this.EndPoint.Address, this.EndPoint.Port); MessageReader message = MessageReader.GetSized(BufferSize); try @@ -266,6 +268,11 @@ namespace Hazel.Udp.FewerThreads { this.socket.SendTo(msg.Span.GetUnderlyingArray(), msg.Span.Offset, msg.Span.Length, SocketFlags.None, msg.Recipient); } + else + { + this.Logger.WriteError("Socket is no longer able to send"); + break; + } } catch (Exception e) { @@ -373,6 +380,7 @@ namespace Hazel.Udp.FewerThreads // Flush outgoing packets this.sendQueue?.CompleteAdding(); + if (wasActive) { this.sendThread.Join(); -- 2.39.5