std::cv_status wait_until_impl( mutex &lock, const std::chrono::time_point<Clock, Duration> &abs_timeout) { PMEMobjpool *pop = pmemobj_pool_by_ptr(this); /* convert to my clock */ const typename Clock::time_point their_now = Clock::now(); const clock_type::time_point my_now = clock_type::now(); const auto delta = abs_timeout - their_now; const auto my_rel = my_now + delta; struct timespec ts = detail::timepoint_to_timespec(my_rel); auto ret = pmemobj_cond_timedwait(pop, &this->pcond, lock.native_handle(), &ts); if (ret == 0) return std::cv_status::no_timeout; else if (ret == ETIMEDOUT) return std::cv_status::timeout; else throw lock_error(ret, std::system_category(), "Error waiting on a condition " "variable."); }
void condition::wait(mutex &m) { pthread_mutex_t* the_mutex = m.native_handle(); int const res = pthread_cond_wait(&c, the_mutex); if (res) boost::throw_exception( boost::thread_resource_error(res, "pthread_cond_wait failed")); }
/** * Internal implementation of the wait call. */ void wait_impl(mutex &lock) { PMEMobjpool *pop = pmemobj_pool_by_ptr(this); if (int ret = pmemobj_cond_wait(pop, &this->pcond, lock.native_handle())) throw lock_error(ret, std::system_category(), "Error waiting on a condition " "variable."); }