about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorAaron Turon <aturon@mozilla.com>2014-11-24 16:38:06 -0800
committerAaron Turon <aturon@mozilla.com>2014-12-18 23:31:34 -0800
commitb66681cd31674e1a2d0b9675ef8183c463470bb5 (patch)
tree478c2accf952f3b9908428f57bc4557ce0f2b564 /src/libstd
parent74d07699938b846703ab552f52cd5c32f751900f (diff)
downloadrust-b66681cd31674e1a2d0b9675ef8183c463470bb5.tar.gz
rust-b66681cd31674e1a2d0b9675ef8183c463470bb5.zip
Allow args to work without rt initialization
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/os.rs6
-rw-r--r--src/libstd/rt/args.rs22
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()
         }
     }