Commit 748551da authored by Joseph Noir's avatar Joseph Noir

Fix implementation to use existing function

parent 433beae7
...@@ -94,24 +94,7 @@ bool condition_variable::wait_until(unique_lock<mutex>& lock, ...@@ -94,24 +94,7 @@ bool condition_variable::wait_until(unique_lock<mutex>& lock,
template <class Rep, class Period> template <class Rep, class Period>
cv_status condition_variable::wait_for(unique_lock<mutex>& lock, cv_status condition_variable::wait_for(unique_lock<mutex>& lock,
const std::chrono::duration<Rep, Period>& timeout_duration) { const std::chrono::duration<Rep, Period>& timeout_duration) {
using namespace std::chrono; return wait_until(lock, now() + timeout_duration);
using std::chrono::duration;
if (timeout_duration <= timeout_duration.zero()) {
return cv_status::timeout;
}
timex_t timeout, before, after;
auto s = duration_cast<seconds>(timeout_duration);
timeout.seconds = s.count();
timeout.microseconds = (duration_cast<microseconds>(timeout_duration - s)).count();
vtimer_now(&before);
vtimer_t timer;
vtimer_set_wakeup(&timer, timeout, sched_active_pid);
wait(lock);
vtimer_now(&after);
vtimer_remove(&timer);
auto passed = timex_sub(after,before);
auto cmp = timex_cmp(passed, timeout);
return cmp < 1 ? cv_status::no_timeout : cv_status::timeout;
} }
template <class Rep, class Period, class Predicate> template <class Rep, class Period, class Predicate>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment