From 088fe15be5ff52b1bb595b7ca49cc550fceaf2a4 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Wed, 25 Jun 2025 22:51:32 -0400 Subject: [PATCH] improve shutdown logic somewhat --- .../server/api/StreamingApiServerService.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts index 34d62e8f09..35855ab9bf 100644 --- a/packages/backend/src/server/api/StreamingApiServerService.ts +++ b/packages/backend/src/server/api/StreamingApiServerService.ts @@ -227,6 +227,7 @@ export class StreamingApiServerService { this.#connections.set(connection, Date.now()); + // TODO use collapsed queue const userUpdateIntervalId = user ? setInterval(() => { this.usersService.updateLastActiveDate(user); }, 1000 * 60 * 5) : null; @@ -263,13 +264,24 @@ export class StreamingApiServerService { } @bindThis - public detach(): Promise { + public async detach(): Promise { if (this.#cleanConnectionsIntervalId) { clearInterval(this.#cleanConnectionsIntervalId); this.#cleanConnectionsIntervalId = null; } - return new Promise((resolve) => { - this.#wss.close(() => resolve()); + + for (const connection of this.#connections.keys()) { + connection.close(); + } + + this.#connections.clear(); + this.#connectionsByClient.clear(); + + await new Promise((resolve, reject) => { + this.#wss.close(err => { + if (err) reject(err); + else resolve(); + }); }); } }