#ifndef _PSEM_H_ #define _PSEM_H_ #include "usg_common.h" #include #include "time_util.h" inline int psem_timedwait(sem_t *sem, const struct timespec *ts) { 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; } inline int psem_wait(sem_t *sem) { // return sem_wait(sem); int rv; while ( (rv = sem_wait(sem)) == -1) { if(errno == EINTR) continue; else { return -1; } } return 0; } inline int psem_trywait(sem_t *sem) { return sem_trywait(sem); } inline int psem_post(sem_t *sem) { return sem_post(sem); } #endif