From d5e3d57b5a83b6248fa688d02ce2d2fee8a79074 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:15:49 +1100 Subject: [PATCH] prevent errors during node shutdown --- tests/integration/nodeprocess.nim | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 5aed81df..3fbb4445 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -128,17 +128,28 @@ method stop*(node: NodeProcess) {.base, async.} = error "failed to terminate process", errCode = $errCode trace "waiting for node process to exit" - let exitCode = await node.process.waitForExit(3.seconds) - if exitCode > 0: + var backoff = 8 + while node.process.running().valueOr false: + backoff = min(backoff*2, 1024) # Exponential backoff + await sleepAsync(backoff) + + let exitCode = node.process.peekExitCode().valueOr: + fatal "could not get exit code from process", error + return + + if exitCode > 0 and exitCode != 143: # 143 = SIGTERM (initiated above) error "failed to exit process, check for zombies", exitCode - trace "closing node process' streams" - await node.process.closeWait() except CancelledError as error: raise error except CatchableError as e: error "error stopping node process", error = e.msg finally: + try: + trace "closing node process' streams" + await node.process.closeWait() + except: + discard node.process = nil trace "node stopped"