Fix for race condition in *nix connect().

This commit is contained in:
cheatfate 2019-06-06 21:22:17 +03:00
parent 9160dcdbba
commit a8a1138b8b
No known key found for this signature in database
GPG Key ID: 46ADD633A7201F95
1 changed files with 17 additions and 16 deletions

View File

@ -1076,22 +1076,23 @@ else:
return retFuture
proc continuation(udata: pointer) =
var data = cast[ptr CompletionData](udata)
var err = 0
let fd = data.fd
fd.removeWriter()
if not fd.getSocketError(err):
closeSocket(fd)
retFuture.fail(getTransportOsError(osLastError()))
return
if err != 0:
closeSocket(fd)
retFuture.fail(getTransportOsError(OSErrorCode(err)))
return
let transp = newStreamSocketTransport(fd, bufferSize, child)
# Start tracking transport
trackStream(transp)
retFuture.complete(transp)
if not retFuture.finished:
var data = cast[ptr CompletionData](udata)
var err = 0
let fd = data.fd
fd.removeWriter()
if not fd.getSocketError(err):
closeSocket(fd)
retFuture.fail(getTransportOsError(osLastError()))
return
if err != 0:
closeSocket(fd)
retFuture.fail(getTransportOsError(OSErrorCode(err)))
return
let transp = newStreamSocketTransport(fd, bufferSize, child)
# Start tracking transport
trackStream(transp)
retFuture.complete(transp)
while true:
var res = posix.connect(SocketHandle(sock),