From e9cec6604463b9638ffcbd9009f2e4dcce6818f8 Mon Sep 17 00:00:00 2001 From: Mehul Arora Date: Mon, 22 Dec 2025 03:21:53 -0500 Subject: [PATCH] fix: encoder not flushing data --- .../src/futures/bufread/generic/encoder.rs | 7 +++++-- crates/async-compression/src/generic/bufread/encoder.rs | 2 +- crates/async-compression/src/tokio/bufread/generic/mod.rs | 6 +++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/crates/async-compression/src/futures/bufread/generic/encoder.rs b/crates/async-compression/src/futures/bufread/generic/encoder.rs index 6605b7ef..8ea55372 100644 --- a/crates/async-compression/src/futures/bufread/generic/encoder.rs +++ b/crates/async-compression/src/futures/bufread/generic/encoder.rs @@ -23,8 +23,11 @@ impl AsyncRead for Encoder { } let mut output = WriteBuffer::new_initialized(buf); - self.do_poll_read(cx, &mut output) - .map_ok(|()| output.written_len()) + match self.do_poll_read(cx, &mut output) { + Poll::Pending if output.written().is_empty() => Poll::Pending, + Poll::Ready(Err(e)) => Poll::Ready(Err(e)), + _ => Poll::Ready(Ok(output.written_len())), + } } } diff --git a/crates/async-compression/src/generic/bufread/encoder.rs b/crates/async-compression/src/generic/bufread/encoder.rs index bc303f88..23ebba7c 100644 --- a/crates/async-compression/src/generic/bufread/encoder.rs +++ b/crates/async-compression/src/generic/bufread/encoder.rs @@ -58,7 +58,7 @@ impl Encoder { read += input.written().len(); - // Poll for more data + self.state = State::Encoding(read); break; } } diff --git a/crates/async-compression/src/tokio/bufread/generic/mod.rs b/crates/async-compression/src/tokio/bufread/generic/mod.rs index bd7f4002..efe559d1 100644 --- a/crates/async-compression/src/tokio/bufread/generic/mod.rs +++ b/crates/async-compression/src/tokio/bufread/generic/mod.rs @@ -30,5 +30,9 @@ fn poll_read( unsafe { buf.assume_init(initialized) }; buf.advance(written); - res + match res { + Poll::Pending if written == 0 => Poll::Pending, + Poll::Ready(Err(e)) => Poll::Ready(Err(e)), + _ => Poll::Ready(Ok(())), + } }