diff options
| author | Alan Somers <asomers@gmail.com> | 2016-04-05 03:25:32 +0000 |
|---|---|---|
| committer | Alan Somers <asomers@gmail.com> | 2016-04-05 03:25:32 +0000 |
| commit | 112463a3b1b1fc30c8f407e50e9ef692034ccb37 (patch) | |
| tree | 675f22d1c5bee1abf76d47bc9235c07a582bf6fd /src/libstd | |
| parent | abc3777c06abced90b415b920082a4814d9051d7 (diff) | |
| download | rust-112463a3b1b1fc30c8f407e50e9ef692034ccb37.tar.gz rust-112463a3b1b1fc30c8f407e50e9ef692034ccb37.zip | |
Reduce code duplication in thread.rs
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/sys/unix/thread.rs | 60 |
1 files changed, 18 insertions, 42 deletions
diff --git a/src/libstd/sys/unix/thread.rs b/src/libstd/sys/unix/thread.rs index 0f238d5c11c..4b0201cfd01 100644 --- a/src/libstd/sys/unix/thread.rs +++ b/src/libstd/sys/unix/thread.rs @@ -201,28 +201,17 @@ pub mod guard { current().map(|s| s as *mut libc::c_void) } - #[cfg(target_os = "freebsd")] + #[cfg(any(target_os = "android", target_os = "freebsd", + target_os = "linux", target_os = "netbsd"))] unsafe fn get_stack_start() -> Option<*mut libc::c_void> { let mut ret = None; let mut attr: libc::pthread_attr_t = ::mem::zeroed(); assert_eq!(libc::pthread_attr_init(&mut attr), 0); - if libc::pthread_attr_get_np(libc::pthread_self(), &mut attr) == 0 { - let mut stackaddr = ::ptr::null_mut(); - let mut stacksize = 0; - assert_eq!(libc::pthread_attr_getstack(&attr, &mut stackaddr, - &mut stacksize), 0); - ret = Some(stackaddr); - } - assert_eq!(libc::pthread_attr_destroy(&mut attr), 0); - ret - } - - #[cfg(any(target_os = "linux", target_os = "android", target_os = "netbsd"))] - unsafe fn get_stack_start() -> Option<*mut libc::c_void> { - let mut ret = None; - let mut attr: libc::pthread_attr_t = ::mem::zeroed(); - assert_eq!(libc::pthread_attr_init(&mut attr), 0); - if libc::pthread_getattr_np(libc::pthread_self(), &mut attr) == 0 { + #[cfg(target_os = "freebsd")] + let e = libc::pthread_attr_get_np(libc::pthread_self(), &mut attr); + #[cfg(not(target_os = "freebsd"))] + let e = libc::pthread_getattr_np(libc::pthread_self(), &mut attr); + if e == 0 { let mut stackaddr = ::ptr::null_mut(); let mut stacksize = 0; assert_eq!(libc::pthread_attr_getstack(&attr, &mut stackaddr, @@ -304,33 +293,18 @@ pub mod guard { }) } - #[cfg(target_os = "freebsd")] - pub unsafe fn current() -> Option<usize> { - let mut ret = None; - let mut attr: libc::pthread_attr_t = ::mem::zeroed(); - assert_eq!(libc::pthread_attr_init(&mut attr), 0); - if libc::pthread_attr_get_np(libc::pthread_self(), &mut attr) == 0 { - let mut guardsize = 0; - assert_eq!(libc::pthread_attr_getguardsize(&attr, &mut guardsize), 0); - if guardsize == 0 { - panic!("there is no guard page"); - } - let mut stackaddr = ::ptr::null_mut(); - let mut size = 0; - assert_eq!(libc::pthread_attr_getstack(&attr, &mut stackaddr, - &mut size), 0); - ret = Some(stackaddr as usize - guardsize as usize); - } - assert_eq!(libc::pthread_attr_destroy(&mut attr), 0); - ret - } - - #[cfg(any(target_os = "linux", target_os = "android", target_os = "netbsd"))] + #[cfg(any(target_os = "android", target_os = "freebsd", + target_os = "linux", target_os = "netbsd"))] pub unsafe fn current() -> Option<usize> { let mut ret = None; let mut attr: libc::pthread_attr_t = ::mem::zeroed(); assert_eq!(libc::pthread_attr_init(&mut attr), 0); - if libc::pthread_getattr_np(libc::pthread_self(), &mut attr) == 0 { + #[cfg(target_os = "freebsd")] + let e = libc::pthread_attr_get_np(libc::pthread_self(), &mut attr); + #[cfg(not(target_os = "freebsd"))] + let e = libc::pthread_getattr_np(libc::pthread_self(), &mut attr); + if e == 0 { + //if libc::pthread_getattr_np(libc::pthread_self(), &mut attr) == 0 { let mut guardsize = 0; assert_eq!(libc::pthread_attr_getguardsize(&attr, &mut guardsize), 0); if guardsize == 0 { @@ -341,7 +315,9 @@ pub mod guard { assert_eq!(libc::pthread_attr_getstack(&attr, &mut stackaddr, &mut size), 0); - ret = if cfg!(target_os = "netbsd") { + ret = if cfg!(target_os = "freebsd") { + Some(stackaddr as usize - guardsize as usize) + } else if cfg!(target_os = "netbsd") { Some(stackaddr as usize) } else { Some(stackaddr as usize + guardsize as usize) |
