diff options
| author | bors <bors@rust-lang.org> | 2021-07-19 10:10:08 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-07-19 10:10:08 +0000 |
| commit | 8df945c4717ffaf923b57bf30c473df6fc98bc85 (patch) | |
| tree | 8929ee5e23a7bd91146213570268566f37deb884 /library/std/src/sys | |
| parent | 83f08223a90b71f59e5dc5f38e384a49a76c8452 (diff) | |
| parent | 6cb69ea790ad635acb3a8d4826e03ac29ca10351 (diff) | |
Auto merge of #87269 - GuillaumeGomez:rollup-qukedv0, r=GuillaumeGomez
Rollup of 8 pull requests Successful merges: - #86230 (Add --nocapture option to rustdoc) - #87210 (Rustdoc accessibility: make the sidebar headers actual headers) - #87227 (Move asm! and global_asm! to core::arch) - #87236 (Simplify command-line argument initialization on unix) - #87251 (Fix "item info" width) - #87256 (Extend HIR-based WF checking to associated type defaults) - #87259 (triagebot shortcut config) - #87268 (Don't create references to uninitialized data in `List::from_arena`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'library/std/src/sys')
| -rw-r--r-- | library/std/src/sys/unix/args.rs | 24 | ||||
| -rw-r--r-- | library/std/src/sys/unix/mod.rs | 1 |
2 files changed, 3 insertions, 22 deletions
diff --git a/library/std/src/sys/unix/args.rs b/library/std/src/sys/unix/args.rs index fc423e393d4..ad93fa610c4 100644 --- a/library/std/src/sys/unix/args.rs +++ b/library/std/src/sys/unix/args.rs @@ -14,11 +14,6 @@ pub unsafe fn init(argc: isize, argv: *const *const u8) { imp::init(argc, argv) } -/// One-time global cleanup. -pub unsafe fn cleanup() { - imp::cleanup() -} - /// Returns the command line arguments pub fn args() -> Args { imp::args() @@ -82,16 +77,10 @@ mod imp { use crate::ptr; use crate::sync::atomic::{AtomicIsize, AtomicPtr, Ordering}; - use crate::sys_common::mutex::StaticMutex; - static ARGC: AtomicIsize = AtomicIsize::new(0); static ARGV: AtomicPtr<*const u8> = AtomicPtr::new(ptr::null_mut()); - // We never call `ENV_LOCK.init()`, so it is UB to attempt to - // acquire this mutex reentrantly! - static LOCK: StaticMutex = StaticMutex::new(); unsafe fn really_init(argc: isize, argv: *const *const u8) { - let _guard = LOCK.lock(); ARGC.store(argc, Ordering::Relaxed); ARGV.store(argv as *mut _, Ordering::Relaxed); } @@ -127,21 +116,16 @@ mod imp { init_wrapper }; - pub unsafe fn cleanup() { - let _guard = LOCK.lock(); - ARGC.store(0, Ordering::Relaxed); - ARGV.store(ptr::null_mut(), Ordering::Relaxed); - } - pub fn args() -> Args { Args { iter: clone().into_iter() } } fn clone() -> Vec<OsString> { unsafe { - let _guard = LOCK.lock(); - let argc = ARGC.load(Ordering::Relaxed); + // Load ARGC and ARGV without a lock. If the store to either ARGV or + // ARGC isn't visible yet, we'll return an empty argument list. let argv = ARGV.load(Ordering::Relaxed); + let argc = if argv.is_null() { 0 } else { ARGC.load(Ordering::Relaxed) }; (0..argc) .map(|i| { let cstr = CStr::from_ptr(*argv.offset(i) as *const libc::c_char); @@ -159,8 +143,6 @@ mod imp { pub unsafe fn init(_argc: isize, _argv: *const *const u8) {} - pub fn cleanup() {} - #[cfg(target_os = "macos")] pub fn args() -> Args { use crate::os::unix::prelude::*; diff --git a/library/std/src/sys/unix/mod.rs b/library/std/src/sys/unix/mod.rs index 2da71b2a448..9e553ec7682 100644 --- a/library/std/src/sys/unix/mod.rs +++ b/library/std/src/sys/unix/mod.rs @@ -123,7 +123,6 @@ pub unsafe fn init(argc: isize, argv: *const *const u8) { // SAFETY: must be called only once during runtime cleanup. // NOTE: this is not guaranteed to run, for example when the program aborts. pub unsafe fn cleanup() { - args::cleanup(); stack_overflow::cleanup(); } |
