From 8eeef8492ac30fe32d0502a9829de3b53025b7aa Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Sun, 20 Jan 2019 11:01:18 +0100 Subject: [PATCH] tools/wrapped_reader_stream.rs: allocate Vec for buffer --- src/tools/wrapped_reader_stream.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/tools/wrapped_reader_stream.rs b/src/tools/wrapped_reader_stream.rs index 965163e6..77611612 100644 --- a/src/tools/wrapped_reader_stream.rs +++ b/src/tools/wrapped_reader_stream.rs @@ -6,12 +6,15 @@ use futures::stream::Stream; pub struct WrappedReaderStream { reader: R, + buffer: Vec, } impl WrappedReaderStream { pub fn new(reader: R) -> Self { - Self { reader } + let mut buffer = Vec::with_capacity(64*1024); + unsafe { buffer.set_len(buffer.capacity()); } + Self { reader, buffer } } } @@ -27,13 +30,12 @@ impl Stream for WrappedReaderStream { type Error = std::io::Error; fn poll(&mut self) -> Result>>, std::io::Error> { - let mut buf = [0u8;64*1024]; - match tokio_threadpool::blocking(|| self.reader.read(&mut buf)) { + match tokio_threadpool::blocking(|| self.reader.read(&mut self.buffer)) { Ok(Async::Ready(Ok(n))) => { if n == 0 { // EOF Ok(Async::Ready(None)) } else { - Ok(Async::Ready(Some(buf[..n].to_vec()))) + Ok(Async::Ready(Some(self.buffer[..n].to_vec()))) } }, Ok(Async::Ready(Err(err))) => Err(err),