mirror of
https://github.com/status-im/nim-chronos.git
synced 2025-02-22 16:08:23 +00:00
Properly fix cancellation race and not introduce FD leaks. (#102)
This commit is contained in:
parent
d6d0084333
commit
bedd1ded5e
@ -629,8 +629,9 @@ elif unixPlatform:
|
|||||||
let loop = getGlobalDispatcher()
|
let loop = getGlobalDispatcher()
|
||||||
|
|
||||||
proc continuation(udata: pointer) =
|
proc continuation(udata: pointer) =
|
||||||
unregister(fd)
|
if SocketHandle(fd) in loop.selector:
|
||||||
close(SocketHandle(fd))
|
unregister(fd)
|
||||||
|
close(SocketHandle(fd))
|
||||||
if not isNil(aftercb):
|
if not isNil(aftercb):
|
||||||
aftercb(nil)
|
aftercb(nil)
|
||||||
|
|
||||||
|
@ -722,8 +722,7 @@ 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()
|
||||||
GC_ref(povl)
|
GC_ref(povl)
|
||||||
@ -1251,8 +1250,7 @@ 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:
|
||||||
var res = posix.connect(SocketHandle(sock),
|
var res = posix.connect(SocketHandle(sock),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user