#[cfg(all(feature = "threaded", feature = "symbols"))]
pub(crate) mod spawn;
use crate::error::Result;
use core::time::Duration;
use rusl::error::Errno;
#[cfg(all(feature = "threaded", feature = "symbols"))]
pub use spawn::*;
pub fn sleep(duration: Duration) -> Result<()> {
let mut ts = duration.try_into()?;
loop {
match rusl::time::nanosleep_same_ptr(&mut ts) {
Ok(()) => return Ok(()),
Err(ref e) if e.code == Some(Errno::EINTR) => {
continue;
}
Err(e) => return Err(e.into()),
}
}
}
#[cfg(test)]
mod tests {
use core::time::Duration;
use crate::thread::sleep;
use crate::time::MonotonicInstant;
#[test]
fn try_sleep() {
let sleep_dur = Duration::from_millis(15);
let now = MonotonicInstant::now();
sleep(sleep_dur).unwrap();
let elapsed = now.elapsed();
assert!(elapsed > sleep_dur);
}
}