mirror of
https://github.com/status-im/nim-chronos.git
synced 2025-02-22 16:08:23 +00:00
Fix for race condition in *nix connect().
This commit is contained in:
parent
9160dcdbba
commit
a8a1138b8b
@ -1076,22 +1076,23 @@ else:
|
|||||||
return retFuture
|
return retFuture
|
||||||
|
|
||||||
proc continuation(udata: pointer) =
|
proc continuation(udata: pointer) =
|
||||||
var data = cast[ptr CompletionData](udata)
|
if not retFuture.finished:
|
||||||
var err = 0
|
var data = cast[ptr CompletionData](udata)
|
||||||
let fd = data.fd
|
var err = 0
|
||||||
fd.removeWriter()
|
let fd = data.fd
|
||||||
if not fd.getSocketError(err):
|
fd.removeWriter()
|
||||||
closeSocket(fd)
|
if not fd.getSocketError(err):
|
||||||
retFuture.fail(getTransportOsError(osLastError()))
|
closeSocket(fd)
|
||||||
return
|
retFuture.fail(getTransportOsError(osLastError()))
|
||||||
if err != 0:
|
return
|
||||||
closeSocket(fd)
|
if err != 0:
|
||||||
retFuture.fail(getTransportOsError(OSErrorCode(err)))
|
closeSocket(fd)
|
||||||
return
|
retFuture.fail(getTransportOsError(OSErrorCode(err)))
|
||||||
let transp = newStreamSocketTransport(fd, bufferSize, child)
|
return
|
||||||
# Start tracking transport
|
let transp = newStreamSocketTransport(fd, bufferSize, child)
|
||||||
trackStream(transp)
|
# Start tracking transport
|
||||||
retFuture.complete(transp)
|
trackStream(transp)
|
||||||
|
retFuture.complete(transp)
|
||||||
|
|
||||||
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