diff --git a/src/syscall/time.rs b/src/syscall/time.rs index 3cb871d2..ddf6b238 100644 --- a/src/syscall/time.rs +++ b/src/syscall/time.rs @@ -48,9 +48,7 @@ pub fn nanosleep(req_buf: UserSliceRo, rem_buf_opt: Option) -> Resu // reason? context::switch(); - if current_context.write().wake.take().is_some() { - return Err(Error::new(EINTR)); - } + let was_interrupted = current_context.write().wake.take().is_some(); if let Some(rem_buf) = rem_buf_opt { let current = time::monotonic(); @@ -69,7 +67,11 @@ pub fn nanosleep(req_buf: UserSliceRo, rem_buf_opt: Option) -> Resu })?; } - Ok(()) + if was_interrupted { + Err(Error::new(EINTR)) + } else { + Ok(()) + } } pub fn sched_yield() -> Result<()> {