Properly fix cancellation race and not introduce FD leaks. (#102)

This commit is contained in:
Eugene Kabanov 2020-06-05 19:11:51 +03:00 committed by GitHub
parent d6d0084333
commit bedd1ded5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 6 deletions

View File

@ -629,6 +629,7 @@ elif unixPlatform:
let loop = getGlobalDispatcher() let loop = getGlobalDispatcher()
proc continuation(udata: pointer) = proc continuation(udata: pointer) =
if SocketHandle(fd) in loop.selector:
unregister(fd) unregister(fd)
close(SocketHandle(fd)) close(SocketHandle(fd))
if not isNil(aftercb): if not isNil(aftercb):

View File

@ -722,7 +722,6 @@ when defined(windows):
GC_unref(ovl) GC_unref(ovl)
proc cancel(udata: pointer) {.gcsafe.} = proc cancel(udata: pointer) {.gcsafe.} =
if not(retFuture.finished()):
sock.closeSocket() sock.closeSocket()
povl = RefCustomOverlapped() povl = RefCustomOverlapped()
@ -1251,7 +1250,6 @@ else:
retFuture.complete(transp) retFuture.complete(transp)
proc cancel(udata: pointer) {.gcsafe.} = proc cancel(udata: pointer) {.gcsafe.} =
if not(retFuture.finished()):
closeSocket(sock) closeSocket(sock)
while true: while true: