Skip to content

Commit 7803c8d

Browse files
author
Dave Huseby
committed
refactoring get_stack to be cleaner
1 parent c83128e commit 7803c8d

File tree

1 file changed

+20
-27
lines changed

1 file changed

+20
-27
lines changed

src/libstd/sys/unix/stack_overflow.rs

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -140,46 +140,39 @@ mod imp {
140140
target_os = "bitrig",
141141
target_os = "netbsd",
142142
target_os = "openbsd"))]
143-
unsafe fn get_stack() -> *mut libc::c_void {
144-
let stack = mmap(ptr::null_mut(),
145-
SIGSTKSZ,
146-
PROT_READ | PROT_WRITE,
147-
MAP_PRIVATE | MAP_ANON,
148-
-1,
149-
0);
150-
if stack == MAP_FAILED {
143+
unsafe fn get_stack() -> libc::stack_t {
144+
let stackp = mmap(ptr::null_mut(),
145+
SIGSTKSZ,
146+
PROT_READ | PROT_WRITE,
147+
MAP_PRIVATE | MAP_ANON,
148+
-1,
149+
0);
150+
if stackp == MAP_FAILED {
151151
panic!("failed to allocate an alternative stack");
152152
}
153-
stack
153+
libc::stack_t { ss_sp: stackp, ss_flags: 0, ss_size: SIGSTKSZ }
154154
}
155155

156156
#[cfg(any(target_os = "dragonfly",
157157
target_os = "freebsd"))]
158-
unsafe fn get_stack() -> *mut i8 {
159-
let stack = mmap(ptr::null_mut(),
160-
SIGSTKSZ,
161-
PROT_READ | PROT_WRITE,
162-
MAP_PRIVATE | MAP_ANON,
163-
-1,
164-
0);
165-
if stack == MAP_FAILED {
158+
unsafe fn get_stack() -> libc::stack_t {
159+
let stackp = mmap(ptr::null_mut(),
160+
SIGSTKSZ,
161+
PROT_READ | PROT_WRITE,
162+
MAP_PRIVATE | MAP_ANON,
163+
-1,
164+
0);
165+
if stackp == MAP_FAILED {
166166
panic!("failed to allocate an alternative stack");
167167
}
168-
stack as *mut i8
168+
libc::stack_t { ss_sp: stackp as *mut i8, ss_flags: 0, ss_size: SIGSTKSZ }
169169
}
170170

171171

172172
pub unsafe fn make_handler() -> Handler {
173-
let alt_stack = get_stack();
174-
let mut stack: libc::stack_t = mem::zeroed();
175-
176-
stack.ss_sp = alt_stack;
177-
stack.ss_flags = 0;
178-
stack.ss_size = SIGSTKSZ;
179-
173+
let stack = get_stack();
180174
sigaltstack(&stack, ptr::null_mut());
181-
182-
Handler { _data: alt_stack as *mut libc::c_void }
175+
Handler { _data: stack.ss_sp as *mut libc::c_void }
183176
}
184177

185178
pub unsafe fn drop_handler(handler: &mut Handler) {

0 commit comments

Comments
 (0)