From e7b01d24cc1846117f275e82277fc46e85d854e7 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 12 Oct 2024 17:57:45 +1100 Subject: [PATCH 1/6] Fix tokio::bufread::generic::Decoder::do_poll_read impl Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- src/tokio/bufread/generic/decoder.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/tokio/bufread/generic/decoder.rs b/src/tokio/bufread/generic/decoder.rs index aa568f4f..9990d33e 100644 --- a/src/tokio/bufread/generic/decoder.rs +++ b/src/tokio/bufread/generic/decoder.rs @@ -84,20 +84,17 @@ impl Decoder { State::Flushing } else { let mut input = PartialBuffer::new(input); - let done = this.decoder.decode(&mut input, output).or_else(|err| { - // ignore the first error, occurs when input is empty - // but we need to run decode to flush - if first { - Ok(false) - } else { - Err(err) + let done = match this.decoder.decode(&mut input, output) { + Ok(done) => { + this.reader.as_mut().consume(input.written().len()); + done } - })?; + Err(err) if first => false, + Err(err) => return Err(err), + }; first = false; - let len = input.written().len(); - this.reader.as_mut().consume(len); if done { State::Flushing } else { From 594c0f17c3cb668c616a854c9e85b3db4bb91f75 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 12 Oct 2024 18:00:04 +1100 Subject: [PATCH 2/6] Fix futures::bufread::generic::Decoder::do_poll_read impl Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- src/futures/bufread/generic/decoder.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/futures/bufread/generic/decoder.rs b/src/futures/bufread/generic/decoder.rs index a3a968a7..20b4d346 100644 --- a/src/futures/bufread/generic/decoder.rs +++ b/src/futures/bufread/generic/decoder.rs @@ -84,20 +84,17 @@ impl Decoder { State::Flushing } else { let mut input = PartialBuffer::new(input); - let done = this.decoder.decode(&mut input, output).or_else(|err| { - // ignore the first error, occurs when input is empty - // but we need to run decode to flush - if first { - Ok(false) - } else { - Err(err) + let done = match this.decoder.decode(&mut input, output) { + Ok(done) => { + this.reader.as_mut().consume(input.written().len()); + done } - })?; + Err(err) if first => false, + Err(err) => return Err(err), + }; first = false; - let len = input.written().len(); - this.reader.as_mut().consume(len); if done { State::Flushing } else { From 8bb9ecabbc0c6864d325c51f6f0c134474af15f0 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 12 Oct 2024 18:07:06 +1100 Subject: [PATCH 3/6] Fix typing error in tokio::bufread And add back comment Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- src/tokio/bufread/generic/decoder.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tokio/bufread/generic/decoder.rs b/src/tokio/bufread/generic/decoder.rs index 9990d33e..19b86ea0 100644 --- a/src/tokio/bufread/generic/decoder.rs +++ b/src/tokio/bufread/generic/decoder.rs @@ -89,8 +89,10 @@ impl Decoder { this.reader.as_mut().consume(input.written().len()); done } + // ignore the first error, occurs when input is empty + // but we need to run decode to flush Err(err) if first => false, - Err(err) => return Err(err), + Err(err) => return Poll::Ready(Err(err)), }; first = false; From bf154818e440ed845b58d8e63b910ae3bdcd2646 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 12 Oct 2024 18:08:15 +1100 Subject: [PATCH 4/6] Fix typing error in futures::bufread Also add back comments Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- src/futures/bufread/generic/decoder.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/futures/bufread/generic/decoder.rs b/src/futures/bufread/generic/decoder.rs index 20b4d346..06489899 100644 --- a/src/futures/bufread/generic/decoder.rs +++ b/src/futures/bufread/generic/decoder.rs @@ -89,8 +89,10 @@ impl Decoder { this.reader.as_mut().consume(input.written().len()); done } + // ignore the first error, occurs when input is empty + // but we need to run decode to flush Err(err) if first => false, - Err(err) => return Err(err), + Err(err) => return Poll::Ready(Err(err)), }; first = false; From ce075ec12147008a060be6ab5bf16635cddf0998 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 12 Oct 2024 18:10:41 +1100 Subject: [PATCH 5/6] Fix lifetime in futures::bufread Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- src/futures/bufread/generic/decoder.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/futures/bufread/generic/decoder.rs b/src/futures/bufread/generic/decoder.rs index 06489899..60b0f69a 100644 --- a/src/futures/bufread/generic/decoder.rs +++ b/src/futures/bufread/generic/decoder.rs @@ -86,7 +86,8 @@ impl Decoder { let mut input = PartialBuffer::new(input); let done = match this.decoder.decode(&mut input, output) { Ok(done) => { - this.reader.as_mut().consume(input.written().len()); + let consumed = input.written().len(); + this.reader.as_mut().consume(consumed); done } // ignore the first error, occurs when input is empty From 2f4f8a70d38a7db74337da9e79f12ca77352f9aa Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 12 Oct 2024 18:11:32 +1100 Subject: [PATCH 6/6] Fix tokio::bufread Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- src/tokio/bufread/generic/decoder.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tokio/bufread/generic/decoder.rs b/src/tokio/bufread/generic/decoder.rs index 19b86ea0..c5c16d18 100644 --- a/src/tokio/bufread/generic/decoder.rs +++ b/src/tokio/bufread/generic/decoder.rs @@ -86,7 +86,8 @@ impl Decoder { let mut input = PartialBuffer::new(input); let done = match this.decoder.decode(&mut input, output) { Ok(done) => { - this.reader.as_mut().consume(input.written().len()); + let consumed = input.written().len(); + this.reader.as_mut().consume(consumed); done } // ignore the first error, occurs when input is empty