diff --git a/src/rust/engine/src/externs.rs b/src/rust/engine/src/externs.rs index 016acb84a23..0b59665d777 100644 --- a/src/rust/engine/src/externs.rs +++ b/src/rust/engine/src/externs.rs @@ -676,8 +676,7 @@ pub fn with_vec(c_ptr: *mut C, c_len: usize, f: F) -> T where F: FnOnce(&Vec) -> T, { - let cs = unsafe { Vec::from_raw_parts(c_ptr, c_len, c_len) }; + let cs = std::mem::ManuallyDrop::new(unsafe { Vec::from_raw_parts(c_ptr, c_len, c_len) }); let output = f(&cs); - mem::forget(cs); output } diff --git a/src/rust/engine/src/lib.rs b/src/rust/engine/src/lib.rs index 8f61f6491c5..66ba884aaec 100644 --- a/src/rust/engine/src/lib.rs +++ b/src/rust/engine/src/lib.rs @@ -879,9 +879,8 @@ fn with_scheduler(scheduler_ptr: *mut Scheduler, f: F) -> T where F: FnOnce(&Scheduler) -> T, { - let scheduler = unsafe { Box::from_raw(scheduler_ptr) }; + let scheduler = std::mem::ManuallyDrop::new(unsafe { Box::from_raw(scheduler_ptr) }); let t = f(&scheduler); - mem::forget(scheduler); t } @@ -892,9 +891,8 @@ fn with_session(session_ptr: *mut Session, f: F) -> T where F: FnOnce(&Session) -> T, { - let session = unsafe { Box::from_raw(session_ptr) }; + let session = std::mem::ManuallyDrop::new(unsafe { Box::from_raw(session_ptr) }); let t = f(&session); - mem::forget(session); t } @@ -905,9 +903,8 @@ fn with_execution_request(execution_request_ptr: *mut ExecutionRequest, f: where F: FnOnce(&mut ExecutionRequest) -> T, { - let mut execution_request = unsafe { Box::from_raw(execution_request_ptr) }; + let mut execution_request = std::mem::ManuallyDrop::new(unsafe { Box::from_raw(execution_request_ptr) }); let t = f(&mut execution_request); - mem::forget(execution_request); t } @@ -918,8 +915,7 @@ fn with_tasks(tasks_ptr: *mut Tasks, f: F) -> T where F: FnOnce(&mut Tasks) -> T, { - let mut tasks = unsafe { Box::from_raw(tasks_ptr) }; + let mut tasks = std::mem::ManuallyDrop::new(unsafe { Box::from_raw(tasks_ptr) }); let t = f(&mut tasks); - mem::forget(tasks); t }