diff --git a/extensions/matrix/src/matrix/monitor/index.test.ts b/extensions/matrix/src/matrix/monitor/index.test.ts index 31332f13178..b9aa8e8b624 100644 --- a/extensions/matrix/src/matrix/monitor/index.test.ts +++ b/extensions/matrix/src/matrix/monitor/index.test.ts @@ -327,6 +327,9 @@ describe("monitorMatrixProvider", () => { hoisted.client.drainPendingDecryptions.mockImplementation(async () => { hoisted.callOrder.push("drain-decrypts"); }); + hoisted.stopThreadBindingManager.mockImplementation(() => { + hoisted.callOrder.push("stop-manager"); + }); hoisted.releaseSharedClientInstance.mockImplementation(async () => { hoisted.callOrder.push("release-client"); return true; @@ -365,6 +368,9 @@ describe("monitorMatrixProvider", () => { hoisted.callOrder.indexOf("handler-done"), ); expect(hoisted.callOrder.indexOf("handler-done")).toBeLessThan( + hoisted.callOrder.indexOf("stop-manager"), + ); + expect(hoisted.callOrder.indexOf("stop-manager")).toBeLessThan( hoisted.callOrder.indexOf("stop-deduper"), ); expect(hoisted.callOrder.indexOf("stop-deduper")).toBeLessThan( diff --git a/extensions/matrix/src/matrix/monitor/index.ts b/extensions/matrix/src/matrix/monitor/index.ts index 10588375abf..71efc539424 100644 --- a/extensions/matrix/src/matrix/monitor/index.ts +++ b/extensions/matrix/src/matrix/monitor/index.ts @@ -153,10 +153,10 @@ export async function monitorMatrixProvider(opts: MonitorMatrixOpts = {}): Promi } cleanedUp = true; try { - threadBindingManager?.stop(); client.stopSyncWithoutPersist(); await client.drainPendingDecryptions("matrix monitor shutdown"); await waitForInFlightRoomMessages(); + threadBindingManager?.stop(); await inboundDeduper.stop(); await releaseSharedClientInstance(client, "persist"); } finally { diff --git a/extensions/matrix/src/matrix/sdk/decrypt-bridge.ts b/extensions/matrix/src/matrix/sdk/decrypt-bridge.ts index 68a746c7b7a..1ca35993e91 100644 --- a/extensions/matrix/src/matrix/sdk/decrypt-bridge.ts +++ b/extensions/matrix/src/matrix/sdk/decrypt-bridge.ts @@ -337,6 +337,10 @@ export class MatrixDecryptBridge { } await new Promise((resolve) => { this.retryIdleResolvers.add(resolve); + if (this.activeRetryRuns === 0) { + this.retryIdleResolvers.delete(resolve); + resolve(); + } }); }