summaryrefslogtreecommitdiff
path: root/src/sched.rs
diff options
context:
space:
mode:
authorKevin DeJong <kevinmdejong@gmail.com>2016-12-10 23:32:11 -0800
committerKevin DeJong <kevinmdejong@gmail.com>2016-12-11 00:33:26 -0800
commit7b98f0d2c3929b3d961480d9316e9073e9bcc218 (patch)
tree2963b781187e617e699b182418716461c2cabb6e /src/sched.rs
parent2cfeb5758e1c4957acf4a8108a4c0793ef18a937 (diff)
downloadnix-7b98f0d2c3929b3d961480d9316e9073e9bcc218.zip
Ensure child stack passed to clone is 16 byte aligned.
Diffstat (limited to 'src/sched.rs')
-rw-r--r--src/sched.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/sched.rs b/src/sched.rs
index 4af33203..66b4ed4f 100644
--- a/src/sched.rs
+++ b/src/sched.rs
@@ -114,8 +114,9 @@ pub fn clone(mut cb: CloneCb,
let res = unsafe {
let combined = flags.bits() | signal.unwrap_or(0);
let ptr = stack.as_mut_ptr().offset(stack.len() as isize);
+ let ptr_aligned = ptr.offset((ptr as usize % 16) as isize * -1);
ffi::clone(mem::transmute(callback as extern "C" fn(*mut Box<::std::ops::FnMut() -> isize>) -> i32),
- ptr as *mut c_void,
+ ptr_aligned as *mut c_void,
combined,
&mut cb)
};