diff options
| author | Aaron Turon <aturon@mozilla.com> | 2014-11-24 16:38:06 -0800 |
|---|---|---|
| committer | Aaron Turon <aturon@mozilla.com> | 2014-12-18 23:31:34 -0800 |
| commit | b66681cd31674e1a2d0b9675ef8183c463470bb5 (patch) | |
| tree | 478c2accf952f3b9908428f57bc4557ce0f2b564 /src/libstd | |
| parent | 74d07699938b846703ab552f52cd5c32f751900f (diff) | |
| download | rust-b66681cd31674e1a2d0b9675ef8183c463470bb5.tar.gz rust-b66681cd31674e1a2d0b9675ef8183c463470bb5.zip | |
Allow args to work without rt initialization
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/os.rs | 6 | ||||
| -rw-r--r-- | src/libstd/rt/args.rs | 22 |
2 files changed, 10 insertions, 18 deletions
diff --git a/src/libstd/os.rs b/src/libstd/os.rs index 550e9e06aae..f46d9ab7c7e 100644 --- a/src/libstd/os.rs +++ b/src/libstd/os.rs @@ -702,11 +702,7 @@ fn real_args_as_bytes() -> Vec<Vec<u8>> { target_os = "dragonfly"))] fn real_args_as_bytes() -> Vec<Vec<u8>> { use rt; - - match rt::args::clone() { - Some(args) => args, - None => panic!("process arguments not initialized") - } + rt::args::clone().unwrap_or_else(|| vec![]) } #[cfg(not(windows))] diff --git a/src/libstd/rt/args.rs b/src/libstd/rt/args.rs index 8b9dbf73c53..93c956fc3c5 100644 --- a/src/libstd/rt/args.rs +++ b/src/libstd/rt/args.rs @@ -62,37 +62,33 @@ mod imp { } pub unsafe fn cleanup() { - rtassert!(take().is_some()); + take(); LOCK.destroy(); } pub fn take() -> Option<Vec<Vec<u8>>> { - with_lock(|| unsafe { + let guard = LOCK.lock(); + unsafe { let ptr = get_global_ptr(); let val = mem::replace(&mut *ptr, None); val.as_ref().map(|s: &Box<Vec<Vec<u8>>>| (**s).clone()) - }) + } } pub fn put(args: Vec<Vec<u8>>) { - with_lock(|| unsafe { + let guard = LOCK.lock(); + unsafe { let ptr = get_global_ptr(); rtassert!((*ptr).is_none()); (*ptr) = Some(box args.clone()); - }) + } } pub fn clone() -> Option<Vec<Vec<u8>>> { - with_lock(|| unsafe { + let guard = LOCK.lock(); + unsafe { let ptr = get_global_ptr(); (*ptr).as_ref().map(|s: &Box<Vec<Vec<u8>>>| (**s).clone()) - }) - } - - fn with_lock<T, F>(f: F) -> T where F: FnOnce() -> T { - unsafe { - let _guard = LOCK.lock(); - f() } } |
