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