diff options
-rw-r--r-- | lib/pure/osproc.nim | 2 | ||||
-rw-r--r-- | tests/osproc/twaitforexit.nim | 18 |
2 files changed, 20 insertions, 0 deletions
diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim index 9284e823a..e88680463 100644 --- a/lib/pure/osproc.nim +++ b/lib/pure/osproc.nim @@ -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: diff --git a/tests/osproc/twaitforexit.nim b/tests/osproc/twaitforexit.nim new file mode 100644 index 000000000..5db8d2566 --- /dev/null +++ b/tests/osproc/twaitforexit.nim @@ -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)) \ No newline at end of file |