summaryrefslogtreecommitdiff
path: root/std/node
diff options
context:
space:
mode:
authorSteven Guerrero <stephenguerrero43@gmail.com>2020-11-17 19:49:57 -0500
committerGitHub <noreply@github.com>2020-11-17 19:49:57 -0500
commitb6fa6d6aac10e992c37b6df887d6f1311356b430 (patch)
treeb533c9bb2c422413b42d503748f5eb5a43df0b33 /std/node
parentf7afe2b78f39fb635991a638885052108741727d (diff)
fix(std/node) Fix event extendability (#8409)
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();
+ }
+});