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
 }