fixes #23825; Busy wait on waitid, sleeping at regular intervals (#23826)

Addresses #23825 by using the approaching described in
https://github.com/nim-lang/Nim/pull/23743#issuecomment-2199523110.

This takes the approach from Python's `subprocess` library which calls
`waitid` in loop, while sleeping at regular intervals.

CC @alex65536
This commit is contained in:
Mark Leyva
2024-07-12 06:25:18 -07:00
committed by GitHub
parent 6d7ab08dee
commit 58b36bd85e
2 changed files with 58 additions and 102 deletions

View File

@@ -15,4 +15,19 @@ block: # bug #5091
discard
# check that we don't have to wait msWait milliseconds
doAssert(getTime() < atStart + milliseconds(msWait))
doAssert(getTime() < atStart + milliseconds(msWait))
block: # bug #23825
var thr: array[0..99, Thread[int]]
proc threadFunc(i: int) {.thread.} =
let sleepTime = float(i) / float(thr.len + 1)
doAssert sleepTime < 1.0
let p = startProcess("sleep", workingDir = "", args = @[$sleepTime], options = {poUsePath, poParentStreams})
# timeout = 1_000_000 seconds ~= 278 hours ~= 11.5 days
doAssert p.waitForExit(timeout=1_000_000_000) == 0
for i in low(thr)..high(thr):
createThread(thr[i], threadFunc, i)
joinThreads(thr)