fixes #5091; Ensure we don't wait on an exited process on Linux (#23743)

Fixes #5091.

Ensure we don't wait on an exited process on Linux

(cherry picked from commit 288d5c4ac3)
This commit is contained in:
Mark Leyva
2024-07-01 02:42:11 -07:00
committed by narimiran
parent ae117bd7bc
commit 7d0cdfc79d
2 changed files with 20 additions and 0 deletions

View File

@@ -1416,6 +1416,8 @@ elif not defined(useNimRtl):
tmspec.tv_nsec = (timeout * 1_000_000)
try:
if not running(p):
return exitStatusLikeShell(p.exitStatus)
if clock_gettime(CLOCK_REALTIME, stspec) == -1:
raiseOSError(osLastError())
while true:

View File

@@ -0,0 +1,18 @@
import std/[osproc, os, times]
block: # bug #5091
when defined(linux):
const filename = "false"
var p = startProcess(filename, options = {poStdErrToStdOut, poUsePath})
os.sleep(1000) # make sure process has exited already
let atStart = getTime()
const msWait = 2000
try:
discard waitForExit(p, msWait)
except OSError:
discard
# check that we don't have to wait msWait milliseconds
doAssert(getTime() < atStart + milliseconds(msWait))