1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

fix(ext/node): don't throw error for unsupported signal binding on windows (#25699)

This commit is contained in:
Yoshiya Hinosawa 2024-09-19 12:22:01 +09:00 committed by GitHub
parent 282c4c262d
commit f460188e58
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 38 additions and 2 deletions

View file

@ -517,6 +517,12 @@ Process.prototype.on = function (
// Ignores SIGBREAK if the platform is not windows. // Ignores SIGBREAK if the platform is not windows.
} else if (event === "SIGTERM" && Deno.build.os === "windows") { } else if (event === "SIGTERM" && Deno.build.os === "windows") {
// Ignores SIGTERM on 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 { } else {
EventEmitter.prototype.on.call(this, event, listener); EventEmitter.prototype.on.call(this, event, listener);
Deno.addSignalListener(event as Deno.Signal, listener); Deno.addSignalListener(event as Deno.Signal, listener);
@ -541,8 +547,10 @@ Process.prototype.off = function (
} else if (event.startsWith("SIG")) { } else if (event.startsWith("SIG")) {
if (event === "SIGBREAK" && Deno.build.os !== "windows") { if (event === "SIGBREAK" && Deno.build.os !== "windows") {
// Ignores SIGBREAK if the platform is not windows. // Ignores SIGBREAK if the platform is not windows.
} else if (event === "SIGTERM" && Deno.build.os === "windows") { } else if (
// Ignores SIGTERM on windows. event !== "SIGBREAK" && event !== "SIGINT" && Deno.build.os === "windows"
) {
// Ignores all signals except SIGBREAK and SIGINT on windows.
} else { } else {
EventEmitter.prototype.off.call(this, event, listener); EventEmitter.prototype.off.call(this, event, listener);
Deno.removeSignalListener(event as Deno.Signal, listener); Deno.removeSignalListener(event as Deno.Signal, listener);

View file

@ -25,6 +25,7 @@ import {
assertThrows, assertThrows,
fail, fail,
} from "@std/assert"; } from "@std/assert";
import { assertSpyCall, assertSpyCalls, spy } from "@std/testing/mock";
import { stripAnsiCode } from "@std/fmt/colors"; import { stripAnsiCode } from "@std/fmt/colors";
import * as path from "@std/path"; import * as path from "@std/path";
import { delay } from "@std/async/delay"; 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( Deno.test(
{ permissions: { run: true, read: true } }, { permissions: { run: true, read: true } },
async function processKill() { async function processKill() {