From 5822049cf164e167125dd425cb302fe4d8d56814 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期五, 05 二月 2021 18:41:00 +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