use crate::cmp; use crate::ffi::CStr; use crate::io; use crate::sys::cvt; use crate::sys::{unsupported, Void}; use crate::time::Duration; use libc; pub struct Thread(Void); pub const DEFAULT_MIN_STACK_SIZE: usize = 4096; impl Thread { // unsafe: see thread::Builder::spawn_unchecked for safety requirements pub unsafe fn new(_stack: usize, _p: Box) -> io::Result { unsupported() } pub fn yield_now() { let ret = unsafe { libc::__wasi_sched_yield() }; debug_assert_eq!(ret, 0); } pub fn set_name(_name: &CStr) { // nope } pub fn sleep(dur: Duration) { let mut secs = dur.as_secs(); let mut nsecs = dur.subsec_nanos() as i32; unsafe { while secs > 0 || nsecs > 0 { let mut ts = libc::timespec { tv_sec: cmp::min(libc::time_t::max_value() as u64, secs) as libc::time_t, tv_nsec: nsecs, }; secs -= ts.tv_sec as u64; cvt(libc::nanosleep(&ts, &mut ts)).unwrap(); nsecs = 0; } } } pub fn join(self) { match self.0 {} } } pub mod guard { pub type Guard = !; pub unsafe fn current() -> Option { None } pub unsafe fn init() -> Option { None } }