From ff9080a76674606979af12fc9dc42cbafb351bd8 Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Sun, 1 Nov 2026 17:46:24 +0100 Subject: [PATCH] Remove the close listener when a rejected upload ends A connection kept open for more requests got one more close listener for every rejected upload that finished within the grace period. --- packages/controller/src/routes.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/controller/src/routes.ts b/packages/controller/src/routes.ts index cf073506..767451ca 100644 --- a/packages/controller/src/routes.ts +++ b/packages/controller/src/routes.ts @@ -366,8 +366,13 @@ function rejectUpload(req: Request, res: Response, status: number) { } const socket = req.socket; const timeout = setTimeout(() => socket.destroy(), rejectedUploadDrainMs); - req.once("end", () => clearTimeout(timeout)); - socket.once("close", () => clearTimeout(timeout)); + const onClose = () => clearTimeout(timeout); + socket.once("close", onClose); + // The connection may be kept open for more requests, so don't leave a listener on it + req.once("end", () => { + clearTimeout(timeout); + socket.off("close", onClose); + }); } async function putStream(req: Request<{ id: string }>, res: Response) {