]> git.lizzy.rs Git - rust.git/commitdiff
refactoring get_stack to be cleaner
authorDave Huseby <dhuseby@mozilla.com>
Thu, 28 Jan 2016 00:46:45 +0000 (16:46 -0800)
committerDave Huseby <dhuseby@mozilla.com>
Wed, 3 Feb 2016 05:42:11 +0000 (21:42 -0800)
src/libstd/sys/unix/stack_overflow.rs

index 88ac73de2fb7bcf677c33c6885dffe63d1eb76d4..f5353895c9dbafdc059b5194756c7791dc330400 100644 (file)
@@ -140,46 +140,39 @@ pub unsafe fn cleanup() {
               target_os = "bitrig",
               target_os = "netbsd",
               target_os = "openbsd"))]
-    unsafe fn get_stack() -> *mut libc::c_void {
-        let stack = mmap(ptr::null_mut(),
-                         SIGSTKSZ,
-                         PROT_READ | PROT_WRITE,
-                         MAP_PRIVATE | MAP_ANON,
-                         -1,
-                         0);
-        if stack == MAP_FAILED {
+    unsafe fn get_stack() -> libc::stack_t {
+        let stackp = mmap(ptr::null_mut(),
+                          SIGSTKSZ,
+                          PROT_READ | PROT_WRITE,
+                          MAP_PRIVATE | MAP_ANON,
+                          -1,
+                          0);
+        if stackp == MAP_FAILED {
             panic!("failed to allocate an alternative stack");
         }
-        stack
+        libc::stack_t { ss_sp: stackp, ss_flags: 0, ss_size: SIGSTKSZ }
     }
 
     #[cfg(any(target_os = "dragonfly",
               target_os = "freebsd"))]
-    unsafe fn get_stack() -> *mut i8 {
-        let stack = mmap(ptr::null_mut(),
-                         SIGSTKSZ,
-                         PROT_READ | PROT_WRITE,
-                         MAP_PRIVATE | MAP_ANON,
-                         -1,
-                         0);
-        if stack == MAP_FAILED {
+    unsafe fn get_stack() -> libc::stack_t {
+        let stackp = mmap(ptr::null_mut(),
+                          SIGSTKSZ,
+                          PROT_READ | PROT_WRITE,
+                          MAP_PRIVATE | MAP_ANON,
+                          -1,
+                          0);
+        if stackp == MAP_FAILED {
             panic!("failed to allocate an alternative stack");
         }
-        stack as *mut i8
+        libc::stack_t { ss_sp: stackp as *mut i8, ss_flags: 0, ss_size: SIGSTKSZ }
     }
 
 
     pub unsafe fn make_handler() -> Handler {
-        let alt_stack = get_stack();
-        let mut stack: libc::stack_t = mem::zeroed();
-
-        stack.ss_sp = alt_stack;
-        stack.ss_flags = 0;
-        stack.ss_size = SIGSTKSZ;
-
+        let stack = get_stack();
         sigaltstack(&stack, ptr::null_mut());
-
-        Handler { _data: alt_stack as *mut libc::c_void }
+        Handler { _data: stack.ss_sp as *mut libc::c_void }
     }
 
     pub unsafe fn drop_handler(handler: &mut Handler) {