From 7afa2e66439725d1c9b5b81d7bac552bd70b58ce Mon Sep 17 00:00:00 2001 From: Nemanja Tosic Date: Sun, 30 May 2021 13:42:01 +0200 Subject: [PATCH] Fix beforeunload memory leak --- src/y-websocket.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/y-websocket.js b/src/y-websocket.js index 09234493..b92b5bd5 100644 --- a/src/y-websocket.js +++ b/src/y-websocket.js @@ -277,9 +277,10 @@ export class WebsocketProvider extends Observable { broadcastMessage(this, encoding.toUint8Array(encoder)) } if (typeof window !== 'undefined') { - window.addEventListener('beforeunload', () => { + this._beforeUnloadHandler = () => { awarenessProtocol.removeAwarenessStates(this.awareness, [doc.clientID], 'window unload') - }) + }; + window.addEventListener('beforeunload', this._beforeUnloadHandler) } awareness.on('update', this._awarenessUpdateHandler) this._checkInterval = /** @type {any} */ (setInterval(() => { @@ -315,6 +316,9 @@ export class WebsocketProvider extends Observable { } clearInterval(this._checkInterval) this.disconnect() + if (this._beforeUnloadHandler) { + window.removeEventListener('beforeunload', this._beforeUnloadHandler) + } this.awareness.off('update', this._awarenessUpdateHandler) this.doc.off('update', this._updateHandler) super.destroy()