From b3195b616da41ce992a69c37be54766f9c809356 Mon Sep 17 00:00:00 2001 From: cheatfate Date: Wed, 7 Nov 2018 21:42:08 +0200 Subject: [PATCH] Some fixes in state transition inside of datagram transport. --- asyncdispatch2/transports/datagram.nim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/asyncdispatch2/transports/datagram.nim b/asyncdispatch2/transports/datagram.nim index 08a8181..5180ebf 100644 --- a/asyncdispatch2/transports/datagram.nim +++ b/asyncdispatch2/transports/datagram.nim @@ -74,6 +74,8 @@ when defined(windows): while len(transp.queue) > 0: if WritePending in transp.state: ## Continuation + if WriteClosed in transp.state: + break transp.state.excl(WritePending) let err = transp.wovl.data.errCode let vector = transp.queue.popFirst() @@ -84,7 +86,7 @@ when defined(windows): transp.state.incl(WritePaused) vector.writer.complete() else: - transp.state = transp.state + {WritePaused, WriteError} + transp.state.incl({WritePaused, WriteError}) vector.writer.fail(getTransportOsError(err)) else: ## Initiation @@ -106,13 +108,14 @@ when defined(windows): let err = osLastError() if int(err) == ERROR_OPERATION_ABORTED: # CancelIO() interrupt + transp.state.excl(WritePending) transp.state.incl(WritePaused) vector.writer.complete() elif int(err) == ERROR_IO_PENDING: transp.queue.addFirst(vector) else: transp.state.excl(WritePending) - transp.state = transp.state + {WritePaused, WriteError} + transp.state.incl({WritePaused, WriteError}) vector.writer.fail(getTransportOsError(err)) else: transp.queue.addFirst(vector) @@ -201,6 +204,7 @@ when defined(windows): var localSock: AsyncFD assert(remote.family == local.family) assert(not isNil(cbproc)) + assert(remote.family in {AddressFamily.IPv4, AddressFamily.IPv6}) if isNil(child): result = DatagramTransport()