| | |
| | | #include "px_sem_util.h" |
| | | |
| | | #define NANO 1000000000 |
| | | struct timespec PXSemUtil::calc_sem_timeout(const struct timespec *ts) { |
| | | int tmp_sec; |
| | | |
| | | struct timespec res; |
| | | struct timespec timeout; |
| | | if (clock_gettime(CLOCK_REALTIME, &timeout) == -1) |
| | | err_exit(errno, "clock_gettime"); |
| | | timeout.tv_nsec += ts->tv_nsec; |
| | | tmp_sec = timeout.tv_nsec / 10e9; |
| | | timeout.tv_nsec = timeout.tv_nsec - tmp_sec * 10e9; |
| | | timeout.tv_sec += ts->tv_sec + tmp_sec; |
| | | return timeout; |
| | | |
| | | res.tv_sec = timeout.tv_sec + ts->tv_sec; |
| | | res.tv_nsec = timeout.tv_nsec + ts->tv_nsec; |
| | | res.tv_sec = res.tv_sec + floor(res.tv_nsec / NANO); |
| | | res.tv_nsec = res.tv_nsec % NANO; |
| | | return res; |
| | | } |