Fix: From<BytesMut> fo Vec<u8> implementation (#554)

Signed-off-by: Jiahao XU <[email protected]>
This commit is contained in:
Jiahao XU
2022-07-13 08:59:54 +02:00
committed by GitHub
parent 068ed41bc0
commit 10d1f6ec5c
+6 -5
View File
@@ -1550,18 +1550,19 @@ impl From<BytesMut> for Vec<u8> {
rebuild_vec(bytes.ptr.as_ptr(), bytes.len, bytes.cap, off) rebuild_vec(bytes.ptr.as_ptr(), bytes.len, bytes.cap, off)
} }
} else if kind == KIND_ARC { } else if kind == KIND_ARC {
let shared = unsafe { &mut *(bytes.data as *mut Shared) }; let shared = bytes.data as *mut Shared;
if shared.is_unique() {
let vec = mem::replace(&mut shared.vec, Vec::new()); if unsafe { (*shared).is_unique() } {
let vec = mem::replace(unsafe { &mut (*shared).vec }, Vec::new());
unsafe { release_shared(shared) }; unsafe { release_shared(shared) };
vec vec
} else { } else {
return bytes.deref().into(); return bytes.deref().to_vec();
} }
} else { } else {
return bytes.deref().into(); return bytes.deref().to_vec();
}; };
let len = bytes.len; let len = bytes.len;