From 53fca2406aa5d5e27d84520aef316664f30ed6cf Mon Sep 17 00:00:00 2001 From: Jaco Date: Sun, 2 May 2021 10:24:10 +0300 Subject: [PATCH] Cleanup WebSocket handlers when close event has been received (#3469) --- CHANGELOG.md | 1 + packages/rpc-provider/src/ws/index.ts | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83842bb3e3..902496b988 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Changes: - Expose additional camelCase `method` on `AbiMessage` (maps to decorated name) - Added explicit double-byte ss58 `AccountId` encoding test - Add known upgrade block for Polkadot v30 +- Cleanup WebSocket handlers when close event has been received - Update to latest Substrate metadata diff --git a/packages/rpc-provider/src/ws/index.ts b/packages/rpc-provider/src/ws/index.ts index 1fe897a66b..462cabf468 100644 --- a/packages/rpc-provider/src/ws/index.ts +++ b/packages/rpc-provider/src/ws/index.ts @@ -225,7 +225,6 @@ export class WsProvider implements ProviderInterface { // 1000 - Normal closure; the connection successfully completed this.#websocket.close(1000); - this.#websocket = null; } catch (error) { l.error(error); @@ -351,11 +350,19 @@ export class WsProvider implements ProviderInterface { } this.#isConnected = false; - this.#websocket = null; + + if (this.#websocket) { + this.#websocket.onclose = null; + this.#websocket.onerror = null; + this.#websocket.onmessage = null; + this.#websocket.onopen = null; + this.#websocket = null; + } + this.#emit('disconnected'); // reject all hanging requests - eraseRecord(this.#handlers, (handler) => handler.callback(error, undefined)); + eraseRecord(this.#handlers, (h) => h.callback(error, undefined)); eraseRecord(this.#waitingForId); if (this.#autoConnectMs > 0) {