Skip to content

Commit

Permalink
hermit: Implement Condvar::wait_timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
mkroening committed Oct 29, 2021
1 parent 37f70a0 commit 42cab43
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions library/std/src/sys/hermit/condvar.rs
Expand Up @@ -55,8 +55,20 @@ impl Condvar {
mutex.lock();
}

pub unsafe fn wait_timeout(&self, _mutex: &Mutex, _dur: Duration) -> bool {
panic!("wait_timeout not supported on hermit");
pub unsafe fn wait_timeout(&self, mutex: &Mutex, dur: Duration) -> bool {
self.counter.fetch_add(1, SeqCst);
mutex.unlock();
let millis = dur.as_millis().min(u32::MAX as u128) as u32;

let res = if millis > 0 {
abi::sem_timedwait(self.sem1, millis)
} else {
abi::sem_trywait(self.sem1)
};

abi::sem_post(self.sem2);
mutex.lock();
res == 0
}

pub unsafe fn destroy(&self) {
Expand Down

0 comments on commit 42cab43

Please sign in to comment.