From c617a1d7c855dd3be448cbff54d34253612d03eb Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Wed, 18 Aug 2021 10:57:08 +0200 Subject: [PATCH] fix(h2): improve errors emitted by H2 stream shutdown --- 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, + }, + ))) } }