From b87f8f34988968d570cc857ea3411d45343f5902 Mon Sep 17 00:00:00 2001 From: kuzeyardabulut <54737933+kuzeyardabulut@users.noreply.github.com> Date: Sat, 5 Aug 2023 16:17:53 +0300 Subject: [PATCH 1/2] adding ManuallyDrop --- src/rust/engine/src/lib.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) 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<F, T>(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<F, T>(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<F, T>(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<F, T>(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 } From 01812d4f2a72b42a0628ef07315b8fac62198f5c Mon Sep 17 00:00:00 2001 From: kuzeyardabulut <54737933+kuzeyardabulut@users.noreply.github.com> Date: Sat, 5 Aug 2023 16:19:03 +0300 Subject: [PATCH 2/2] adding ManuallyDrop --- src/rust/engine/src/externs.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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<F, C, T>(c_ptr: *mut C, c_len: usize, f: F) -> T where F: FnOnce(&Vec<C>) -> 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 }