From d6d0084333b5d6d91b2d710b7c0542d2cd8c4c6f Mon Sep 17 00:00:00 2001 From: Eugene Kabanov Date: Thu, 4 Jun 2020 13:07:52 +0300 Subject: [PATCH] Fix cancellation race when connect() call is getting cancelled. (#101) --- chronos/transports/stream.nim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/chronos/transports/stream.nim b/chronos/transports/stream.nim index bc13c8d..15cd842 100644 --- a/chronos/transports/stream.nim +++ b/chronos/transports/stream.nim @@ -722,7 +722,8 @@ when defined(windows): GC_unref(ovl) proc cancel(udata: pointer) {.gcsafe.} = - sock.closeSocket() + if not(retFuture.finished()): + sock.closeSocket() povl = RefCustomOverlapped() GC_ref(povl) @@ -1250,7 +1251,8 @@ else: retFuture.complete(transp) proc cancel(udata: pointer) {.gcsafe.} = - closeSocket(sock) + if not(retFuture.finished()): + closeSocket(sock) while true: var res = posix.connect(SocketHandle(sock),