diff options
| author | bors <bors@rust-lang.org> | 2017-09-14 03:02:58 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-09-14 03:02:58 +0000 |
| commit | 84bbd14e3f392d63524482e2f0c69cd6fcd7f2c5 (patch) | |
| tree | 245c38d385167096343d83f9884d37275c349e27 /src/libstd/sys_common/thread.rs | |
| parent | d1ca653b170c235ad01a83d89fcb18b1f8b6a3b0 (diff) | |
| parent | b2b50635172254777d16d0fc6112e6d5b68b63f2 (diff) | |
| download | rust-84bbd14e3f392d63524482e2f0c69cd6fcd7f2c5.tar.gz rust-84bbd14e3f392d63524482e2f0c69cd6fcd7f2c5.zip | |
Auto merge of #43972 - TobiasSchaffner:std_clean, r=alexcrichton
Add the libstd-modifications needed for the L4Re target This commit adds the needed modifications to compile the std crate for the L4 Runtime environment (L4Re). A target for the L4Re was introduced in commit: c151220a84e40b65e45308cc0f3bbea4466d3acf In many aspects implementations for linux also apply for the L4Re microkernel. Some uncommon characteristics had to be resolved: * L4Re has no network funktionality * L4Re has a maximum stacksize of 1Mb for threads * L4Re has no uid or gid Co-authored-by: Sebastian Humenda <sebastian.humenda@tu-dresden.de>
Diffstat (limited to 'src/libstd/sys_common/thread.rs')
| -rw-r--r-- | src/libstd/sys_common/thread.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libstd/sys_common/thread.rs b/src/libstd/sys_common/thread.rs index 3ee160da5fa..87fb34a9dec 100644 --- a/src/libstd/sys_common/thread.rs +++ b/src/libstd/sys_common/thread.rs @@ -8,9 +8,12 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use env; use alloc::boxed::FnBox; use libc; +use sync::atomic::{self, Ordering}; use sys::stack_overflow; +use sys::thread as imp; pub unsafe fn start_thread(main: *mut libc::c_void) { // Next, set up our stack overflow handler which may get triggered if we run @@ -20,3 +23,18 @@ pub unsafe fn start_thread(main: *mut libc::c_void) { // Finally, let's run some code. Box::from_raw(main as *mut Box<FnBox()>)() } + +pub fn min_stack() -> usize { + static MIN: atomic::AtomicUsize = atomic::AtomicUsize::new(0); + match MIN.load(Ordering::SeqCst) { + 0 => {} + n => return n - 1, + } + let amt = env::var("RUST_MIN_STACK").ok().and_then(|s| s.parse().ok()); + let amt = amt.unwrap_or(imp::DEFAULT_MIN_STACK_SIZE); + + // 0 is our sentinel value, so ensure that we'll never see 0 after + // initialization has run + MIN.store(amt + 1, Ordering::SeqCst); + amt +} |
