From 8b182d3ed9a8b6546668ebe0813315e36d425e95 Mon Sep 17 00:00:00 2001 From: Pedro Cattori Date: Tue, 2 May 2023 22:11:06 -0400 Subject: [PATCH 1/2] fix(dev): wait until app server is killed before starting new app server --- .changeset/good-laws-marry.md | 5 +++++ packages/remix-dev/devServer_unstable/index.ts | 13 +++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 .changeset/good-laws-marry.md diff --git a/.changeset/good-laws-marry.md b/.changeset/good-laws-marry.md new file mode 100644 index 00000000000..93a8ffcbb62 --- /dev/null +++ b/.changeset/good-laws-marry.md @@ -0,0 +1,5 @@ +--- +"@remix-run/dev": patch +--- + +wait until app server is killed before starting a new app server diff --git a/packages/remix-dev/devServer_unstable/index.ts b/packages/remix-dev/devServer_unstable/index.ts index 89accea8855..4c95fcb9dea 100644 --- a/packages/remix-dev/devServer_unstable/index.ts +++ b/packages/remix-dev/devServer_unstable/index.ts @@ -234,13 +234,10 @@ let relativePath = (file: string) => path.relative(process.cwd(), file); let kill = async (p?: execa.ExecaChildProcess) => { if (p === undefined) return; - // `execa`'s `kill` is not reliable on windows - if (process.platform === "win32") { - await execa("taskkill", ["/pid", String(p.pid), "/f", "/t"]); - return; - } - // wait one tick of the event loop so that we guarantee app server gets killed before proceeding - p.kill("SIGTERM", { forceKillAfterTimeout: 0 }); - await new Promise((resolve) => setTimeout(resolve, 0)); + let channel = Channel.create(); + p.kill("SIGTERM", { forceKillAfterTimeout: 1_000 }); + p.on("exit", channel.ok); + + await channel.result; }; From 0004c51e0c4fc08323184fa6522c1d9e0a8536e9 Mon Sep 17 00:00:00 2001 From: Pedro Cattori Date: Wed, 3 May 2023 10:34:30 -0400 Subject: [PATCH 2/2] fix(dev): keep using taskkill on windows --- packages/remix-dev/devServer_unstable/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/remix-dev/devServer_unstable/index.ts b/packages/remix-dev/devServer_unstable/index.ts index 4c95fcb9dea..89cd7a294d4 100644 --- a/packages/remix-dev/devServer_unstable/index.ts +++ b/packages/remix-dev/devServer_unstable/index.ts @@ -234,10 +234,15 @@ let relativePath = (file: string) => path.relative(process.cwd(), file); let kill = async (p?: execa.ExecaChildProcess) => { if (p === undefined) return; - let channel = Channel.create(); - p.kill("SIGTERM", { forceKillAfterTimeout: 1_000 }); p.on("exit", channel.ok); + // https://github.com/nodejs/node/issues/12378 + if (process.platform === "win32") { + await execa("taskkill", ["/pid", String(p.pid), "/f", "/t"]); + } else { + p.kill("SIGTERM", { forceKillAfterTimeout: 1_000 }); + } + await channel.result; };