From c8a43aed8e08e278471eb7dee27b5d782098a7bc Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Tue, 2 Apr 2024 11:21:11 +0200 Subject: [PATCH] fixup Signed-off-by: Matteo Collina --- lib/dispatcher/client-h2.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/dispatcher/client-h2.js b/lib/dispatcher/client-h2.js index 0a53b75e501..6b48ab9904e 100644 --- a/lib/dispatcher/client-h2.js +++ b/lib/dispatcher/client-h2.js @@ -405,6 +405,18 @@ function writeH2 (client, request) { const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers request.onResponseStarted() + // Due to the stream nature, it is possible we face a race condition + // where the stream has been assigned, but the request has been aborted + // the request remains in-flight and headers hasn't been received yet + // for those scenarios, best effort is to destroy the stream immediately + // as there's no value to keep it open. + if (request.aborted || request.completed) { + const err = new RequestAbortedError() + errorRequest(client, request, err) + util.destroy(stream, err) + return + } + if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), '') === false) { stream.pause() }