diff --git a/src/io/frame.rs b/src/io/frame.rs index 552deb5ec..26538a364 100644 --- a/src/io/frame.rs +++ b/src/io/frame.rs @@ -153,7 +153,7 @@ impl EasyBuf { // If we couldn't get access above then we give ourself a new buffer // here. - let mut v = Vec::with_capacity(cmp::min(INITIAL_CAPACITY, self.as_ref().len())); + let mut v = Vec::with_capacity(cmp::max(INITIAL_CAPACITY, self.as_ref().len())); v.extend_from_slice(self.as_ref()); self.start = 0; self.buf = Arc::new(v); @@ -465,7 +465,7 @@ mod tests { } #[test] - fn easybuf_get_mut_sliced_allocating() { + fn easybuf_get_mut_sliced_allocating_at_least_initial_capacity() { let vec: Vec = (0u8..10u8).collect(); let mut buf: EasyBuf = vec.into(); buf.split_off(9); @@ -477,6 +477,16 @@ mod tests { mem::drop(clone); // prevent unused warning } + #[test] + fn easybuf_get_mut_sliced_allocating_required_capacity() { + let vec: Vec = (0..INITIAL_CAPACITY * 2).map(|_|0u8).collect(); + let mut buf: EasyBuf = vec.into(); + buf.drain_to(INITIAL_CAPACITY / 2); + let clone = buf.clone(); + assert_eq!(buf.get_mut().buf.capacity(), INITIAL_CAPACITY + INITIAL_CAPACITY / 2); + mem::drop(clone) + } + #[test] fn easybuf_into_vec_simple() { let vec: Vec = (0u8..10u8).collect();