diff --git a/CHANGELOG.md b/CHANGELOG.md index 4275137c..68e772fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ## Changes - Fixed an unhandled error in Subspace Storage crashing the host. +- Fixed an unhandled rejection in disconnect logic crashing the host. ## Version 2.0.0-alpha.16 diff --git a/packages/lib/src/link/link.ts b/packages/lib/src/link/link.ts index e3a746c0..0f8f2d32 100644 --- a/packages/lib/src/link/link.ts +++ b/packages/lib/src/link/link.ts @@ -126,16 +126,15 @@ export class Link { }); connector.on("disconnectPrepare", () => { - this.prepareDisconnect().catch( - err => { - logger.error(`Unexpected error preparing disconnect:\n${err.stack}`); + this.prepareDisconnect().finally(() => { + // Only WebSocket connectors issue disconnection events. + const webSocketConnector = this.connector as WebSocketBaseConnector; + if (webSocketConnector.hasSession) { + webSocketConnector.sendDisconnectReady(); } - ).finally( - () => { - // Only WebSocket connectors issue disconnection events. - (this.connector as WebSocketBaseConnector).sendDisconnectReady(); - }, - ); + }).catch(err => { + logger.error(`Unexpected error preparing disconnect:\n${err.stack}`); + }); }); connector.on("invalidate", () => { diff --git a/test/mock.js b/test/mock.js index 171c5923..4d2a8564 100644 --- a/test/mock.js +++ b/test/mock.js @@ -73,6 +73,7 @@ class MockConnector extends lib.BaseConnector { super(src, dst); this.connected = true; + this.hasSession = true; this.sentMessages = []; }