osproc: fix double close on POSIX (#5724)

Calling close() in some cases issued two close() syscalls to one FD, which is incorrect in multithreaded programs.
This commit is contained in:
Michał Zieliński 2018-04-16 20:02:26 +02:00 • committed by Andreas Rumpf
commit b2060acbc4
2 changed files with 38 additions and 6 deletions

24
tests/osproc/tclose.nim Normal file
View file

@ -0,0 +1,24 @@
discard """
exitcode: 0
"""
when defined(linux):
import osproc, os
proc countFds(): int =
result = 0
for i in walkDir("/proc/self/fd"):
result += 1
let initCount = countFds()
let p = osproc.startProcess("echo", options={poUsePath})
assert countFds() == initCount + 3
p.close
assert countFds() == initCount
let p1 = osproc.startProcess("echo", options={poUsePath})
discard p1.inputStream
assert countFds() == initCount + 3
p.close
assert countFds() == initCount