summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoshiya Hinosawa <stibium121@gmail.com>2024-09-19 12:22:01 +0900
committerGitHub <noreply@github.com>2024-09-19 12:22:01 +0900
commitf460188e583f00144000aa0d8ade08218d47c3c1 (patch)
tree9e297db5e591f7234cc833bb0a43bdeb0c4ce18d
parent282c4c262d3a19fe3ae3fd9ea75811b816e65dc1 (diff)
fix(ext/node): don't throw error for unsupported signal binding on windows (#25699)
-rw-r--r--ext/node/polyfills/process.ts12
-rw-r--r--tests/unit_node/process_test.ts28
2 files changed, 38 insertions, 2 deletions
diff --git a/ext/node/polyfills/process.ts b/ext/node/polyfills/process.ts
index 82f92ebaf..3dc6ce61a 100644
--- a/ext/node/polyfills/process.ts
+++ b/ext/node/polyfills/process.ts
@@ -517,6 +517,12 @@ Process.prototype.on = function (
// Ignores SIGBREAK if the platform is not windows.
} else if (event === "SIGTERM" && Deno.build.os === "windows") {
// Ignores SIGTERM on windows.
+ } else if (
+ event !== "SIGBREAK" && event !== "SIGINT" && Deno.build.os === "windows"
+ ) {
+ // Ignores all signals except SIGBREAK and SIGINT on windows.
+ // deno-lint-ignore no-console
+ console.warn(`Ignoring signal "${event}" on Windows`);
} else {
EventEmitter.prototype.on.call(this, event, listener);
Deno.addSignalListener(event as Deno.Signal, listener);
@@ -541,8 +547,10 @@ Process.prototype.off = function (
} else if (event.startsWith("SIG")) {
if (event === "SIGBREAK" && Deno.build.os !== "windows") {
// Ignores SIGBREAK if the platform is not windows.
- } else if (event === "SIGTERM" && Deno.build.os === "windows") {
- // Ignores SIGTERM on windows.
+ } else if (
+ event !== "SIGBREAK" && event !== "SIGINT" && Deno.build.os === "windows"
+ ) {
+ // Ignores all signals except SIGBREAK and SIGINT on windows.
} else {
EventEmitter.prototype.off.call(this, event, listener);
Deno.removeSignalListener(event as Deno.Signal, listener);
diff --git a/tests/unit_node/process_test.ts b/tests/unit_node/process_test.ts
index 944686a87..add9e1280 100644
--- a/tests/unit_node/process_test.ts
+++ b/tests/unit_node/process_test.ts
@@ -25,6 +25,7 @@ import {
assertThrows,
fail,
} from "@std/assert";
+import { assertSpyCall, assertSpyCalls, spy } from "@std/testing/mock";
import { stripAnsiCode } from "@std/fmt/colors";
import * as path from "@std/path";
import { delay } from "@std/async/delay";
@@ -238,6 +239,33 @@ Deno.test({
},
});
+Deno.test({
+ name: "process.on - ignored signals on windows",
+ ignore: Deno.build.os !== "windows",
+ fn() {
+ const ignoredSignals = ["SIGHUP", "SIGUSR1", "SIGUSR2"];
+
+ for (const signal of ignoredSignals) {
+ using consoleSpy = spy(console, "warn");
+ const handler = () => {};
+ process.on(signal, handler);
+ process.off(signal, handler);
+ assertSpyCall(consoleSpy, 0, {
+ args: [`Ignoring signal "${signal}" on Windows`],
+ });
+ }
+
+ {
+ using consoleSpy = spy(console, "warn");
+ const handler = () => {};
+ process.on("SIGTERM", handler);
+ process.off("SIGTERM", handler);
+ // No warning is made for SIGTERM
+ assertSpyCalls(consoleSpy, 0);
+ }
+ },
+});
+
Deno.test(
{ permissions: { run: true, read: true } },
async function processKill() {