From e15d6fe15898caab7180b2065fea3382ecabd3e0 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期五, 05 二月 2021 19:01:23 +0800 Subject: [PATCH] update --- src/psem.cpp | 61 +++++++++++------------------- 1 files changed, 23 insertions(+), 38 deletions(-) diff --git a/src/psem.cpp b/src/psem.cpp index 8d9333f..2ace11f 100644 --- a/src/psem.cpp +++ b/src/psem.cpp @@ -1,51 +1,36 @@ #include "psem.h" #include <semaphore.h> +#include "time_util.h" -#define NANO 1000000000 - - -static struct timespec psem_calc_abs_timeout(const struct timespec *ts) { - - struct timespec res; - struct timespec timeout; - if (clock_gettime(CLOCK_REALTIME, &timeout) == -1) - err_exit(errno, "clock_gettime"); - - 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; -} int psem_timedwait(sem_t *sem, const struct timespec *ts) { - struct timespec abs_timeout = psem_calc_abs_timeout(ts); - - int rv ; - while ( (rv = sem_timedwait(sem, &abs_timeout)) == -1) { - if(errno == EINTR) - continue; - else { - // LoggerFactory::getLogger()->error(errno, "LockFreeQueue push_timeout"); - return rv; - } - } - return 0; + struct timespec abs_timeout = TimeUtil::calc_abs_time(ts); + return sem_timedwait(sem, &abs_timeout); + // int rv ; + // while ( (rv = sem_timedwait(sem, &abs_timeout)) == -1) { + // if(errno == EINTR) + // continue; + // else { + // // LoggerFactory::getLogger()->error(errno, "LockFreeQueue push_timeout"); + // return -1; + // } + // } + // return 0; } int psem_wait(sem_t *sem) { - int rv; - while ( (rv = sem_wait(sem)) == -1) { - if(errno == EINTR) - continue; - else { - // LoggerFactory::getLogger()->error(errno, "LockFreeQueue push_timeout"); - return rv; - } - } - return 0; + return sem_wait(sem); + // int rv; + // while ( (rv = sem_wait(sem)) == -1) { + // if(errno == EINTR) + // continue; + // else { + // return -1; + // } + // } + // return 0; } int psem_trywait(sem_t *sem) { -- Gitblit v1.8.0