47 lines
1.7 KiB
Diff
47 lines
1.7 KiB
Diff
From 1b61414ccdd0e1b5969219ba3ec7664d1f3ab495 Mon Sep 17 00:00:00 2001
|
|
From: Akshay K <iit.akshay@gmail.com>
|
|
Date: Fri, 30 Jul 2021 18:46:45 -0400
|
|
Subject: [PATCH] http2: update handling of rst_stream with error code
|
|
NGHTTP2_CANCEL
|
|
|
|
---
|
|
src/node_http2.cc | 19 ++++++++++---------
|
|
1 file changed, 10 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/src/node_http2.cc b/src/node_http2.cc
|
|
index edbf531..6027318 100644
|
|
--- a/src/node_http2.cc
|
|
+++ b/src/node_http2.cc
|
|
@@ -2136,18 +2136,19 @@ void Http2Stream::SubmitRstStream(const uint32_t code) {
|
|
CHECK(!this->IsDestroyed());
|
|
code_ = code;
|
|
|
|
- // If RST_STREAM frame is received and stream is not writable
|
|
- // because it is busy reading data, don't try force purging it.
|
|
- // Instead add the stream to pending stream list and process
|
|
- // the pending data when it is safe to do so. This is to avoid
|
|
- // double free error due to unwanted behavior of nghttp2.
|
|
- // Ref:https://github.com/nodejs/node/issues/38964
|
|
-
|
|
- // Add stream to the pending list if it is received with scope
|
|
+ auto is_stream_cancel = [](const uint32_t code) {
|
|
+ return code == NGHTTP2_CANCEL;
|
|
+ };
|
|
+
|
|
+ // If RST_STREAM frame is received with error code NGHTTP2_CANCEL,
|
|
+ // add it to the pending list and don't force purge the data. It is
|
|
+ // to avoids the double free error due to unwanted behavior of nghttp2.
|
|
+
|
|
+ // Add stream to the pending list only if it is received with scope
|
|
// below in the stack. The pending list may not get processed
|
|
// if RST_STREAM received is not in scope and added to the list
|
|
// causing endpoint to hang.
|
|
- if (session_->is_in_scope() && IsReading()) {
|
|
+ if (session_->is_in_scope() && is_stream_cancel(code)) {
|
|
session_->AddPendingRstStream(id_);
|
|
return;
|
|
}
|
|
--
|
|
2.27.0
|
|
|