Work around spurious nanosleep wakes

This commit is contained in:
Jeremy Soller
2020-04-20 21:08:56 -06:00
parent dd0633a3d2
commit 0bfd830f3c

View File

@@ -32,7 +32,19 @@ pub fn nanosleep(req: &TimeSpec, rem_opt: Option<&mut TimeSpec>) -> Result<usize
context.block("nanosleep");
}
unsafe { context::switch(); }
//TODO: Find out wake reason
loop {
unsafe { context::switch(); }
let contexts = context::contexts();
let context_lock = contexts.current().ok_or(Error::new(ESRCH))?;
let mut context = context_lock.write();
if context.wake.is_some() {
context.block("nanosleep spurious");
} else {
break;
}
}
if let Some(rem) = rem_opt {
let current = time::monotonic();