summaryrefslogtreecommitdiff
path: root/std/node
diff options
context:
space:
mode:
Diffstat (limited to 'std/node')
-rw-r--r--std/node/events.ts2
-rw-r--r--std/node/events_test.ts18
2 files changed, 19 insertions, 1 deletions
diff --git a/std/node/events.ts b/std/node/events.ts
index 16790907e..a6f800a26 100644
--- a/std/node/events.ts
+++ b/std/node/events.ts
@@ -231,7 +231,7 @@ export default class EventEmitter {
eventName: string | symbol,
listener: GenericFunction | WrappedFunction,
): this {
- return this.addListener(eventName, listener);
+ return this._addListener(eventName, listener, false);
}
/**
diff --git a/std/node/events_test.ts b/std/node/events_test.ts
index 20d68baa3..74b4a3978 100644
--- a/std/node/events_test.ts
+++ b/std/node/events_test.ts
@@ -667,3 +667,21 @@ Deno.test({
assertEquals(ee.listenerCount("error"), 0);
},
});
+
+// Event emitter's `on` previously referenced addListener internally, so overriding addListener
+// would cause a deadlock
+// This is a regression test
+Deno.test("Elements that extend EventEmitter listener alias don't end up in a deadlock", () => {
+ class X extends EventEmitter {
+ addListener(eventName: string, listener: () => void) {
+ return super.on(eventName, listener);
+ }
+ }
+
+ const x = new X();
+ try {
+ x.on("x", () => {});
+ } catch (e) {
+ fail();
+ }
+});