#ifndef _PSEM_H_
|
#define _PSEM_H_
|
|
#include "usg_common.h"
|
#include <semaphore.h>
|
#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
|