Skip to content

Commit 9973e5e

Browse files
authored
Merge branch 'master' into reauthenticate
2 parents c4f3b49 + d2fa07a commit 9973e5e

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/rpc/kv.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use crate::rpc::pb::etcdserverpb::{
2121
use crate::rpc::{get_prefix, KeyRange, KeyValue, ResponseHeader};
2222
use crate::vec::VecExt;
2323
use http::HeaderValue;
24+
use std::mem::ManuallyDrop;
2425
use std::sync::{Arc, RwLock};
2526
use tonic::{IntoRequest, Request};
2627

@@ -469,7 +470,8 @@ impl GetResponse {
469470
/// If `kvs` is set in the request, take the key-value pairs, leaving an empty vector in its place.
470471
#[inline]
471472
pub fn take_kvs(&mut self) -> Vec<KeyValue> {
472-
unsafe { std::mem::transmute(std::mem::take(&mut self.0.kvs)) }
473+
let kvs = ManuallyDrop::new(std::mem::take(&mut self.0.kvs));
474+
unsafe { Vec::from_raw_parts(kvs.as_ptr() as *mut KeyValue, kvs.len(), kvs.capacity()) }
473475
}
474476

475477
#[inline]
@@ -619,7 +621,8 @@ impl DeleteResponse {
619621
/// If `prev_kvs` is set in the request, take the previous key-value pairs, leaving an empty vector in its place.
620622
#[inline]
621623
pub fn take_prev_kvs(&mut self) -> Vec<KeyValue> {
622-
unsafe { std::mem::transmute(std::mem::take(&mut self.0.prev_kvs)) }
624+
let kvs = ManuallyDrop::new(std::mem::take(&mut self.0.prev_kvs));
625+
unsafe { Vec::from_raw_parts(kvs.as_ptr() as *mut KeyValue, kvs.len(), kvs.capacity()) }
623626
}
624627

625628
#[inline]
@@ -866,7 +869,16 @@ impl Txn {
866869
assert!(!self.c_else, "cannot call when after or_else");
867870

868871
self.c_when = true;
869-
self.req.compare = unsafe { std::mem::transmute(compares.into()) };
872+
873+
let compares = ManuallyDrop::new(compares.into());
874+
self.req.compare = unsafe {
875+
Vec::from_raw_parts(
876+
compares.as_ptr() as *mut PbCompare,
877+
compares.len(),
878+
compares.capacity(),
879+
)
880+
};
881+
870882
self
871883
}
872884

0 commit comments

Comments
 (0)