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,8 +629,9 @@ elif unixPlatform:
let loop = getGlobalDispatcher()
proc continuation(udata: pointer) =
unregister(fd)
close(SocketHandle(fd))
if SocketHandle(fd) in loop.selector:
unregister(fd)
close(SocketHandle(fd))
if not isNil(aftercb):
aftercb(nil)

View File

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