19 #include "../core/hp_timer.hpp"
30 }
else if (period<lock_traits::infinite_timeout()) {
31 static const timer_t time;
32 timer_t::time_utc_t now=time.current_time();
33 now.tv_nsec+=(period%1000)*1000000;
34 now.tv_sec+=period/1000+now.tv_nsec/1000000000;
35 now.tv_nsec=now.tv_nsec%1000000000;
36 assert(now.tv_nsec>=0);
37 assert(now.tv_nsec<1000000000);
38 if (sem_timedwait(&sem, &now)==-1) {
40 case ETIMEDOUT:
return lock_traits::atom_unset;
41 case EINTR:
return lock_traits::atom_interrupted;
42 case EAGAIN:
return lock_traits::atom_max_recurse;
44 default:
return lock_traits::atom_abandoned;
47 return lock_traits::atom_set;