From be08648e8298cdb13e9879ee761a73f827268962 Mon Sep 17 00:00:00 2001 From: Anthony Ramine <123095+nox@users.noreply.github.com> Date: Thu, 19 Aug 2021 20:05:26 +0200 Subject: [PATCH] fix(http2): improve errors emitted by HTTP2 `Upgraded` stream shutdown (#2622) --- src/proto/h2/mod.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/proto/h2/mod.rs b/src/proto/h2/mod.rs index b8312aff64..2b066968d5 100644 --- a/src/proto/h2/mod.rs +++ b/src/proto/h2/mod.rs @@ -377,9 +377,24 @@ where fn poll_shutdown( mut self: Pin<&mut Self>, - _cx: &mut Context<'_>, + cx: &mut Context<'_>, ) -> Poll> { - Poll::Ready(self.send_stream.write(&[], true)) + if self.send_stream.write(&[], true).is_ok() { + return Poll::Ready(Ok(())) + } + + Poll::Ready(Err(h2_to_io_error( + match ready!(self.send_stream.poll_reset(cx)) { + Ok(Reason::NO_ERROR) => { + return Poll::Ready(Ok(())) + } + Ok(Reason::CANCEL) | Ok(Reason::STREAM_CLOSED) => { + return Poll::Ready(Err(io::ErrorKind::BrokenPipe.into())) + } + Ok(reason) => reason.into(), + Err(e) => e, + }, + ))) } }