Skip to content

Commit

Permalink
fix(ext/node): don't throw error for unsupported signal binding on wi…
Browse files Browse the repository at this point in the history
…ndows (#25699)
  • Loading branch information
kt3k authored Sep 19, 2024
1 parent 282c4c2 commit f460188
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
12 changes: 10 additions & 2 deletions ext/node/polyfills/process.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
28 changes: 28 additions & 0 deletions tests/unit_node/process_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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() {
Expand Down

0 comments on commit f460188

Please sign in to comment.