diff options
author | 2022-07-13 16:59:54 +1000 | |
---|---|---|
committer | 2022-07-13 08:59:54 +0200 | |
commit | 10d1f6ec5c4e878aad9d13140d3479b3ea78ffcf (patch) | |
tree | 9f51d052d1af25fcf47b9fec93e56fc1bdc68264 /src | |
parent | 068ed41bc02c21fe0a0a4d8e95af8a4668276f5d (diff) | |
download | bytes-10d1f6ec5c4e878aad9d13140d3479b3ea78ffcf.tar.gz bytes-10d1f6ec5c4e878aad9d13140d3479b3ea78ffcf.tar.zst bytes-10d1f6ec5c4e878aad9d13140d3479b3ea78ffcf.zip |
Fix: `From<BytesMut> fo Vec<u8>` implementation (#554)
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/bytes_mut.rs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/bytes_mut.rs b/src/bytes_mut.rs index 65f97b4..25f0ecc 100644 --- a/src/bytes_mut.rs +++ b/src/bytes_mut.rs @@ -1550,18 +1550,19 @@ impl From<BytesMut> for Vec<u8> { rebuild_vec(bytes.ptr.as_ptr(), bytes.len, bytes.cap, off) } } else if kind == KIND_ARC { - let shared = unsafe { &mut *(bytes.data as *mut Shared) }; - if shared.is_unique() { - let vec = mem::replace(&mut shared.vec, Vec::new()); + let shared = bytes.data as *mut Shared; + + if unsafe { (*shared).is_unique() } { + let vec = mem::replace(unsafe { &mut (*shared).vec }, Vec::new()); unsafe { release_shared(shared) }; vec } else { - return bytes.deref().into(); + return bytes.deref().to_vec(); } } else { - return bytes.deref().into(); + return bytes.deref().to_vec(); }; let len = bytes.len; |