From 3b4dcbb01d2980d9fa92987e5814a464e2f10cc1 Mon Sep 17 00:00:00 2001 From: Robert Long Date: Thu, 9 Sep 2021 17:15:41 -0700 Subject: [PATCH] Properly dispose of CallFeeds --- src/webrtc/call.ts | 5 +++++ src/webrtc/callFeed.ts | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/webrtc/call.ts b/src/webrtc/call.ts index 35a7cb970..5673dadef 100644 --- a/src/webrtc/call.ts +++ b/src/webrtc/call.ts @@ -558,6 +558,10 @@ export class MatrixCall extends EventEmitter { } private deleteAllFeeds(): void { + for (const feed of this.feeds) { + feed.dispose(); + } + this.feeds = []; this.emit(CallEvent.FeedsChanged, this.feeds); } @@ -571,6 +575,7 @@ export class MatrixCall extends EventEmitter { return; } + feed.dispose(); this.feeds.splice(this.feeds.indexOf(feed), 1); this.emit(CallEvent.FeedsChanged, this.feeds); } diff --git a/src/webrtc/callFeed.ts b/src/webrtc/callFeed.ts index 6ebadb273..d4287b1de 100644 --- a/src/webrtc/callFeed.ts +++ b/src/webrtc/callFeed.ts @@ -36,6 +36,7 @@ export class CallFeed extends EventEmitter { private frequencyBinCount: Float32Array; private speakingThreshold = SPEAKING_THRESHOLD; private speaking = false; + private volumeLooperTimeout: number; constructor( public stream: MediaStream, @@ -166,7 +167,7 @@ export class CallFeed extends EventEmitter { private volumeLooper(): void { if (!this.analyser) return; - setTimeout(() => { + this.volumeLooperTimeout = setTimeout(() => { if (!this.measuringVolumeActivity) return; this.analyser.getFloatFrequencyData(this.frequencyBinCount); @@ -188,4 +189,8 @@ export class CallFeed extends EventEmitter { this.volumeLooper(); }, POLLING_INTERVAL); } + + public dispose(): void { + clearTimeout(this.volumeLooperTimeout); + } }