diff options
author | Steven Guerrero <stephenguerrero43@gmail.com> | 2020-11-17 19:49:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-17 19:49:57 -0500 |
commit | b6fa6d6aac10e992c37b6df887d6f1311356b430 (patch) | |
tree | b533c9bb2c422413b42d503748f5eb5a43df0b33 | |
parent | f7afe2b78f39fb635991a638885052108741727d (diff) |
fix(std/node) Fix event extendability (#8409)
-rw-r--r-- | std/node/events.ts | 2 | ||||
-rw-r--r-- | std/node/events_test.ts | 18 |
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(); + } +}); |