diff --git a/src/header/signal/mod.rs b/src/header/signal/mod.rs
index b4b8989c05db80aeb7e66b02eb47684a3fb8122b..f3c0620363d872f149c7acde1f8ea407e0d2ebe5 100644
--- a/src/header/signal/mod.rs
+++ b/src/header/signal/mod.rs
@@ -74,15 +74,14 @@ pub unsafe extern "C" fn sigaction(
     act: *const sigaction,
     oact: *mut sigaction,
 ) -> c_int {
-    let mut _sigaction = None;
-    let ptr = if !act.is_null() {
-        _sigaction = Some((*act).clone());
-        _sigaction.as_mut().unwrap().sa_flags |= SA_RESTORER as c_ulong;
-        _sigaction.as_mut().unwrap() as *mut _
+    let act_opt = if !act.is_null() {
+        let mut act_clone = (*act).clone();
+        act_clone.sa_flags |= SA_RESTORER as c_ulong;
+        Some(act_clone)
     } else {
-        ptr::null_mut()
+        None
     };
-    Sys::sigaction(sig, ptr, oact)
+    Sys::sigaction(sig, act_opt.map_or(ptr::null_mut(), |x| &x), oact)
 }
 
 #[no_mangle]