From 8aac0b8bde8231d5714ee7bc9b23a2c7fcf118ea Mon Sep 17 00:00:00 2001 From: JOLIMAITRE Matthieu Date: Sat, 3 Feb 2024 23:29:39 +0100 Subject: [PATCH] fix looping errors --- instance/src/lib/utils.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/instance/src/lib/utils.ts b/instance/src/lib/utils.ts index a941ba0..78f6f18 100644 --- a/instance/src/lib/utils.ts +++ b/instance/src/lib/utils.ts @@ -53,17 +53,20 @@ export function loop_process( on_start: opts?.on_start ?? async_noop, on_stop: opts?.on_stop ?? async_noop, }; + const control = { + do_continue: true, + child_process: null as null | Deno.ChildProcess, + }; const kill_sig = channel<"kill">(); + kill_sig.receive().then(() => { + control.do_continue = false; + control.child_process?.kill(); + }); async function launch() { - while (true) { + while (control.do_continue) { await events.on_start(); - const child_process = command.spawn(); - const result = await Promise.any([kill_sig.receive(), child_process.output()]); - if (result === "kill") { - await events.on_stop(); - child_process.kill(); - break; - } + control.child_process = command.spawn(); + await control.child_process.output(); await events.on_stop(); await sleep(opts?.delay ?? 500); }