| use super::abi; |
| use super::error::expect_success_aborting; |
| use super::time::with_tmos; |
| use crate::time::Duration; |
| |
| pub type ThreadId = abi::ID; |
| |
| pub use super::task::current_task_id_aborting as current; |
| |
| pub fn park(_hint: usize) { |
| match unsafe { abi::slp_tsk() } { |
| abi::E_OK | abi::E_RLWAI => {} |
| err => { |
| expect_success_aborting(err, &"slp_tsk"); |
| } |
| } |
| } |
| |
| pub fn park_timeout(dur: Duration, _hint: usize) { |
| match with_tmos(dur, |tmo| unsafe { abi::tslp_tsk(tmo) }) { |
| abi::E_OK | abi::E_RLWAI | abi::E_TMOUT => {} |
| err => { |
| expect_success_aborting(err, &"tslp_tsk"); |
| } |
| } |
| } |
| |
| pub fn unpark(id: ThreadId, _hint: usize) { |
| match unsafe { abi::wup_tsk(id) } { |
| // It is allowed to try to wake up a destroyed or unrelated task, so we ignore all |
| // errors that could result from that situation. |
| abi::E_OK | abi::E_NOEXS | abi::E_OBJ | abi::E_QOVR => {} |
| err => { |
| expect_success_aborting(err, &"wup_tsk"); |
| } |
| } |
| } |