| 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"); | |
| } | |
| } | |
| } |