Move most init to sys::init
This commit is contained in:
parent
cf470197ad
commit
11445c10ab
@ -37,7 +37,6 @@
|
||||
#[path = "../unsupported/process.rs"]
|
||||
pub mod process;
|
||||
pub mod rwlock;
|
||||
pub mod stack_overflow;
|
||||
pub mod stdio;
|
||||
pub mod thread;
|
||||
pub mod thread_local_dtor;
|
||||
@ -97,8 +96,9 @@ pub extern "C" fn __rust_abort() {
|
||||
}
|
||||
|
||||
// SAFETY: must be called only once during runtime initialization.
|
||||
pub unsafe fn init() {
|
||||
pub unsafe fn init(argc: isize, argv: *const *const u8) {
|
||||
let _ = net::init();
|
||||
args::init(argc, argv);
|
||||
}
|
||||
|
||||
// SAFETY: must be called only once during runtime cleanup.
|
||||
|
@ -1,2 +0,0 @@
|
||||
#[inline]
|
||||
pub unsafe fn init() {}
|
@ -32,7 +32,6 @@
|
||||
#[path = "../unsupported/process.rs"]
|
||||
pub mod process;
|
||||
pub mod rwlock;
|
||||
pub mod stack_overflow;
|
||||
pub mod stdio;
|
||||
pub mod thread;
|
||||
pub mod thread_local_key;
|
||||
@ -41,7 +40,11 @@
|
||||
pub use crate::sys_common::os_str_bytes as os_str;
|
||||
|
||||
// SAFETY: must be called only once during runtime initialization.
|
||||
pub unsafe fn init() {}
|
||||
pub unsafe fn init(argc: isize, argv: *const *const u8) {
|
||||
unsafe {
|
||||
args::init(argc, argv);
|
||||
}
|
||||
}
|
||||
|
||||
// SAFETY: must be called only once during runtime cleanup.
|
||||
pub unsafe fn cleanup() {}
|
||||
|
@ -1,2 +0,0 @@
|
||||
#[cfg_attr(test, allow(dead_code))]
|
||||
pub unsafe fn init() {}
|
@ -45,7 +45,7 @@
|
||||
pub use crate::sys_common::os_str_bytes as os_str;
|
||||
|
||||
// SAFETY: must be called only once during runtime initialization.
|
||||
pub unsafe fn init() {
|
||||
pub unsafe fn init(argc: isize, argv: *const *const u8) {
|
||||
// The standard streams might be closed on application startup. To prevent
|
||||
// std::io::{stdin, stdout,stderr} objects from using other unrelated file
|
||||
// resources opened later, we reopen standards streams when they are closed.
|
||||
@ -60,22 +60,22 @@ pub unsafe fn init() {
|
||||
// to prevent this problem.
|
||||
reset_sigpipe();
|
||||
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(miri)] {
|
||||
// The standard fds are always available in Miri.
|
||||
unsafe fn sanitize_standard_fds() {}
|
||||
} else if #[cfg(not(any(
|
||||
target_os = "emscripten",
|
||||
target_os = "fuchsia",
|
||||
target_os = "vxworks",
|
||||
// The poll on Darwin doesn't set POLLNVAL for closed fds.
|
||||
target_os = "macos",
|
||||
target_os = "ios",
|
||||
target_os = "redox",
|
||||
)))] {
|
||||
// In the case when all file descriptors are open, the poll has been
|
||||
// observed to perform better than fcntl (on GNU/Linux).
|
||||
unsafe fn sanitize_standard_fds() {
|
||||
stack_overflow::init();
|
||||
args::init(argc, argv);
|
||||
|
||||
unsafe fn sanitize_standard_fds() {
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(not(any(
|
||||
// The standard fds are always available in Miri.
|
||||
miri,
|
||||
target_os = "emscripten",
|
||||
target_os = "fuchsia",
|
||||
target_os = "vxworks",
|
||||
// The poll on Darwin doesn't set POLLNVAL for closed fds.
|
||||
target_os = "macos",
|
||||
target_os = "ios",
|
||||
target_os = "redox",
|
||||
)))] {
|
||||
use crate::sys::os::errno;
|
||||
let pfds: &mut [_] = &mut [
|
||||
libc::pollfd { fd: 0, events: 0, revents: 0 },
|
||||
@ -100,9 +100,7 @@ unsafe fn sanitize_standard_fds() {
|
||||
libc::abort();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if #[cfg(any(target_os = "macos", target_os = "ios", target_os = "redox"))] {
|
||||
unsafe fn sanitize_standard_fds() {
|
||||
} else if #[cfg(any(target_os = "macos", target_os = "ios", target_os = "redox"))] {
|
||||
use crate::sys::os::errno;
|
||||
for fd in 0..3 {
|
||||
if libc::fcntl(fd, libc::F_GETFD) == -1 && errno() == libc::EBADF {
|
||||
@ -112,17 +110,13 @@ unsafe fn sanitize_standard_fds() {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
unsafe fn sanitize_standard_fds() {}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(any(target_os = "emscripten", target_os = "fuchsia")))]
|
||||
unsafe fn reset_sigpipe() {
|
||||
#[cfg(not(any(target_os = "emscripten", target_os = "fuchsia")))]
|
||||
assert!(signal(libc::SIGPIPE, libc::SIG_IGN) != libc::SIG_ERR);
|
||||
}
|
||||
#[cfg(any(target_os = "emscripten", target_os = "fuchsia"))]
|
||||
unsafe fn reset_sigpipe() {}
|
||||
}
|
||||
|
||||
// SAFETY: must be called only once during runtime cleanup.
|
||||
|
@ -1,7 +1,5 @@
|
||||
use crate::ffi::OsString;
|
||||
|
||||
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {}
|
||||
|
||||
pub struct Args {}
|
||||
|
||||
pub fn args() -> Args {
|
||||
|
@ -11,7 +11,7 @@ pub mod memchr {
|
||||
use crate::os::raw::c_char;
|
||||
|
||||
// SAFETY: must be called only once during runtime initialization.
|
||||
pub unsafe fn init() {}
|
||||
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {}
|
||||
|
||||
// SAFETY: must be called only once during runtime cleanup.
|
||||
pub unsafe fn cleanup() {}
|
||||
|
@ -15,7 +15,6 @@
|
||||
pub mod pipe;
|
||||
pub mod process;
|
||||
pub mod rwlock;
|
||||
pub mod stack_overflow;
|
||||
pub mod stdio;
|
||||
pub mod thread;
|
||||
#[cfg(target_thread_local)]
|
||||
|
@ -1 +0,0 @@
|
||||
pub unsafe fn init() {}
|
@ -5,8 +5,6 @@
|
||||
use crate::os::wasi::ffi::OsStrExt;
|
||||
use crate::vec;
|
||||
|
||||
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {}
|
||||
|
||||
pub struct Args {
|
||||
iter: vec::IntoIter<OsString>,
|
||||
_dont_send_or_sync_me: PhantomData<*mut ()>,
|
||||
|
@ -42,8 +42,6 @@
|
||||
pub mod process;
|
||||
#[path = "../unsupported/rwlock.rs"]
|
||||
pub mod rwlock;
|
||||
#[path = "../unsupported/stack_overflow.rs"]
|
||||
pub mod stack_overflow;
|
||||
pub mod stdio;
|
||||
pub mod thread;
|
||||
#[path = "../unsupported/thread_local_dtor.rs"]
|
||||
|
@ -2,10 +2,6 @@
|
||||
use crate::marker::PhantomData;
|
||||
use crate::vec;
|
||||
|
||||
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {
|
||||
// On wasm these should always be null, so there's nothing for us to do here
|
||||
}
|
||||
|
||||
pub fn args() -> Args {
|
||||
Args { iter: Vec::new().into_iter(), _dont_send_or_sync_me: PhantomData }
|
||||
}
|
||||
|
@ -35,8 +35,6 @@
|
||||
pub mod pipe;
|
||||
#[path = "../unsupported/process.rs"]
|
||||
pub mod process;
|
||||
#[path = "../unsupported/stack_overflow.rs"]
|
||||
pub mod stack_overflow;
|
||||
#[path = "../unsupported/stdio.rs"]
|
||||
pub mod stdio;
|
||||
pub mod thread;
|
||||
|
@ -14,8 +14,6 @@
|
||||
|
||||
use core::iter;
|
||||
|
||||
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {}
|
||||
|
||||
pub fn args() -> Args {
|
||||
unsafe {
|
||||
let lp_cmd_line = c::GetCommandLineW();
|
||||
|
@ -50,7 +50,9 @@
|
||||
}
|
||||
|
||||
// SAFETY: must be called only once during runtime initialization.
|
||||
pub unsafe fn init() {}
|
||||
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {
|
||||
stack_overflow::init();
|
||||
}
|
||||
|
||||
// SAFETY: must be called only once during runtime cleanup.
|
||||
pub unsafe fn cleanup() {
|
||||
|
@ -10,20 +10,15 @@ pub fn init(argc: isize, argv: *const *const u8) {
|
||||
static INIT: Once = Once::new();
|
||||
INIT.call_once(|| unsafe {
|
||||
// SAFETY: Only called once during runtime initialization.
|
||||
sys::init();
|
||||
sys::init(argc, argv);
|
||||
|
||||
let main_guard = sys::thread::guard::init();
|
||||
sys::stack_overflow::init();
|
||||
|
||||
// Next, set up the current Thread with the guard information we just
|
||||
// created. Note that this isn't necessary in general for new threads,
|
||||
// but we just do this to name the main thread and to give it correct
|
||||
// info about the stack bounds.
|
||||
let thread = Thread::new(Some("main".to_owned()));
|
||||
thread_info::set(main_guard, thread);
|
||||
|
||||
// Store our args if necessary in a squirreled away location
|
||||
sys::args::init(argc, argv);
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user