/* * Copyright (C) 2007 Pingtel Corp., certain elements licensed under a Contributor Agreement. * Contributors retain copyright to elements licensed under a Contributor Agreement. * Licensed to the User under the LGPL license. * * Modified by: Angus Salkeld * Copyright (C) 2012 Red Hat, Inc. * To conform to official implementation and support process shared semaphores. * * The bsd posix semaphore implementation does not have support for timing * out while waiting for a synchronization object. This uses the * pthread_cond_timedwait function and a mutex to build all the other * synchronization objecs with timeout capabilities. */ #ifndef _RPL_SEM_H #define _RPL_SEM_H #include "os_base.h" #include #include #ifdef __cplusplus extern "C" { #endif #ifdef HAVE_SEM_TIMEDWAIT #define rpl_sem_t sem_t #define rpl_sem_init sem_init #define rpl_sem_wait sem_wait #define rpl_sem_timedwait sem_timedwait #define rpl_sem_post sem_post #define rpl_sem_getvalue sem_getvalue #define rpl_sem_destroy sem_destroy #define rpl_sem_trywait sem_trywait #else typedef struct rpl_sem { unsigned int count; uint32_t destroy_request; pthread_mutex_t mutex; pthread_cond_t cond; } rpl_sem_t; int rpl_sem_init(rpl_sem_t * sem, int pshared, unsigned int count); int rpl_sem_wait(rpl_sem_t * sem); int rpl_sem_timedwait(rpl_sem_t * sem, const struct timespec *timeout); int rpl_sem_trywait(rpl_sem_t * sem); int rpl_sem_post(rpl_sem_t * sem); int rpl_sem_getvalue(rpl_sem_t * sem, int *sval); int rpl_sem_destroy(rpl_sem_t * sem); #endif /* HAVE_SEM_TIMEDWAIT */ #ifdef __cplusplus } #endif #endif /* _RPL_SEM_H */