From 49696cecbdf10319dd473d1abc757427fb0a66e9 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 9 May 2023 14:24:34 +0100 Subject: [PATCH] Use WeakMap in ReEmitter to help enable garbage collection (#3344) --- src/ReEmitter.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ReEmitter.ts b/src/ReEmitter.ts index 565e8ea70..5d41ac0e4 100644 --- a/src/ReEmitter.ts +++ b/src/ReEmitter.ts @@ -25,7 +25,7 @@ export class ReEmitter { public constructor(private readonly target: EventEmitter) {} // Map from emitter to event name to re-emitter - private reEmitters = new Map void>>(); + private reEmitters = new WeakMap void>>(); public reEmit(source: EventEmitter, eventNames: string[]): void { let reEmittersByEvent = this.reEmitters.get(source); @@ -35,6 +35,8 @@ export class ReEmitter { } for (const eventName of eventNames) { + if (reEmittersByEvent.has(eventName)) continue; + // We include the source as the last argument for event handlers which may need it, // such as read receipt listeners on the client class which won't have the context // of the room.