提交 0153e64d 编写于 作者: D Dave Huseby

Fixes #31229

上级 50df6b9d
...@@ -224,7 +224,7 @@ fn name_bytes(&self) -> &[u8] { ...@@ -224,7 +224,7 @@ fn name_bytes(&self) -> &[u8] {
fn name_bytes(&self) -> &[u8] { fn name_bytes(&self) -> &[u8] {
unsafe { unsafe {
::slice::from_raw_parts(self.entry.d_name.as_ptr() as *const u8, ::slice::from_raw_parts(self.entry.d_name.as_ptr() as *const u8,
self.entry.d_namelen as usize) self.entry.d_namlen as usize)
} }
} }
#[cfg(any(target_os = "android", #[cfg(any(target_os = "android",
......
...@@ -135,17 +135,42 @@ pub unsafe fn cleanup() { ...@@ -135,17 +135,42 @@ pub unsafe fn cleanup() {
Handler { _data: MAIN_ALTSTACK }; Handler { _data: MAIN_ALTSTACK };
} }
pub unsafe fn make_handler() -> Handler { #[cfg(any(target_os = "linux",
let alt_stack = mmap(ptr::null_mut(), target_os = "macos",
SIGSTKSZ, target_os = "bitrig",
PROT_READ | PROT_WRITE, target_os = "netbsd",
MAP_PRIVATE | MAP_ANON, target_os = "openbsd"))]
-1, unsafe fn get_stack() -> *mut libc::c_void {
0); let stack = mmap(ptr::null_mut(),
if alt_stack == MAP_FAILED { SIGSTKSZ,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON,
-1,
0);
if stack == MAP_FAILED {
panic!("failed to allocate an alternative stack");
}
stack
}
#[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 {
panic!("failed to allocate an alternative stack"); panic!("failed to allocate an alternative stack");
} }
stack as *mut i8
}
pub unsafe fn make_handler() -> Handler {
let alt_stack = get_stack();
let mut stack: libc::stack_t = mem::zeroed(); let mut stack: libc::stack_t = mem::zeroed();
stack.ss_sp = alt_stack; stack.ss_sp = alt_stack;
...@@ -154,7 +179,7 @@ pub unsafe fn make_handler() -> Handler { ...@@ -154,7 +179,7 @@ pub unsafe fn make_handler() -> Handler {
sigaltstack(&stack, ptr::null_mut()); sigaltstack(&stack, ptr::null_mut());
Handler { _data: alt_stack } Handler { _data: alt_stack as *mut libc::c_void }
} }
pub unsafe fn drop_handler(handler: &mut Handler) { pub unsafe fn drop_handler(handler: &mut Handler) {
......
...@@ -939,18 +939,12 @@ fn num_cpus() -> usize { ...@@ -939,18 +939,12 @@ fn num_cpus() -> usize {
fn num_cpus() -> usize { fn num_cpus() -> usize {
let mut cpus: libc::c_uint = 0; let mut cpus: libc::c_uint = 0;
let mut cpus_size = std::mem::size_of_val(&cpus); let mut cpus_size = std::mem::size_of_val(&cpus);
let mut mib = [libc::CTL_HW, libc::HW_AVAILCPU, 0, 0];
unsafe { unsafe {
libc::sysctl(mib.as_mut_ptr(), cpus = libc::sysconf(libc::_SC_NPROCESSORS_ONLN) as libc::c_uint;
2,
&mut cpus as *mut _ as *mut _,
&mut cpus_size as *mut _ as *mut _,
0 as *mut _,
0);
} }
if cpus < 1 { if cpus < 1 {
mib[1] = libc::HW_NCPU; let mut mib = [libc::CTL_HW, libc::HW_NCPU, 0, 0];
unsafe { unsafe {
libc::sysctl(mib.as_mut_ptr(), libc::sysctl(mib.as_mut_ptr(),
2, 2,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册