mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 07:44:48 -05:00
fix(node): track SIG*
listeners in process.listeners
(#23890)
Some npm libraries like `signal-exit` rely on the length of the listener array returned by `process.listeners("SIGNT")` to be correct to function. We weren't tracking `SIG*` events there, which broke those npm libraries. Fixes https://github.com/denoland/deno/issues/22892
This commit is contained in:
parent
d7709daaa0
commit
fb3f82b9ea
2 changed files with 19 additions and 0 deletions
|
@ -469,6 +469,7 @@ Process.prototype.on = function (
|
|||
} else if (event === "SIGTERM" && Deno.build.os === "windows") {
|
||||
// Ignores SIGTERM on windows.
|
||||
} else {
|
||||
EventEmitter.prototype.on.call(this, event, listener);
|
||||
Deno.addSignalListener(event as Deno.Signal, listener);
|
||||
}
|
||||
} else {
|
||||
|
@ -494,6 +495,7 @@ Process.prototype.off = function (
|
|||
} else if (event === "SIGTERM" && Deno.build.os === "windows") {
|
||||
// Ignores SIGTERM on windows.
|
||||
} else {
|
||||
EventEmitter.prototype.off.call(this, event, listener);
|
||||
Deno.removeSignalListener(event as Deno.Signal, listener);
|
||||
}
|
||||
} else {
|
||||
|
@ -537,6 +539,7 @@ Process.prototype.prependListener = function (
|
|||
if (event === "SIGBREAK" && Deno.build.os !== "windows") {
|
||||
// Ignores SIGBREAK if the platform is not windows.
|
||||
} else {
|
||||
EventEmitter.prototype.prependListener.call(this, event, listener);
|
||||
Deno.addSignalListener(event as Deno.Signal, listener);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -1108,3 +1108,19 @@ Deno.test({
|
|||
process.constructor.call({});
|
||||
},
|
||||
});
|
||||
|
||||
// Test for https://github.com/denoland/deno/issues/22892
|
||||
Deno.test("process.listeners - include SIG* events", () => {
|
||||
const listener = () => console.log("SIGINT");
|
||||
process.on("SIGINT", listener);
|
||||
assertEquals(process.listeners("SIGINT").length, 1);
|
||||
|
||||
const listener2 = () => console.log("SIGINT");
|
||||
process.prependListener("SIGINT", listener2);
|
||||
assertEquals(process.listeners("SIGINT").length, 2);
|
||||
|
||||
process.off("SIGINT", listener);
|
||||
assertEquals(process.listeners("SIGINT").length, 1);
|
||||
process.off("SIGINT", listener2);
|
||||
assertEquals(process.listeners("SIGINT").length, 0);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue