mirror of https://gitee.com/bigwinds/arangodb
simplified condition variables
This commit is contained in:
parent
2995914cfa
commit
ccb4f19db2
|
@ -389,7 +389,6 @@ void TRI_WriteUnlockReadWriteLock (TRI_read_write_lock_t* lock) {
|
|||
void TRI_InitCondition (TRI_condition_t* cond) {
|
||||
pthread_cond_init(&cond->_cond, 0);
|
||||
|
||||
cond->_ownMutex = true;
|
||||
cond->_mutex = TRI_Allocate(TRI_CORE_MEM_ZONE, sizeof(pthread_mutex_t), false);
|
||||
|
||||
if (cond->_mutex == NULL) {
|
||||
|
@ -399,28 +398,14 @@ void TRI_InitCondition (TRI_condition_t* cond) {
|
|||
pthread_mutex_init(cond->_mutex, 0);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief initialises a new condition variable with existing mutex
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void TRI_Init2Condition (TRI_condition_t* cond, TRI_mutex_t* mutex) {
|
||||
pthread_cond_init(&cond->_cond, 0);
|
||||
|
||||
cond->_ownMutex = false;
|
||||
cond->_mutex = mutex;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief destroys a condition variable
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void TRI_DestroyCondition (TRI_condition_t* cond) {
|
||||
pthread_cond_destroy(&cond->_cond);
|
||||
|
||||
if (cond->_ownMutex) {
|
||||
pthread_mutex_destroy(cond->_mutex);
|
||||
TRI_Free(TRI_CORE_MEM_ZONE, cond->_mutex);
|
||||
}
|
||||
pthread_mutex_destroy(cond->_mutex);
|
||||
TRI_Free(TRI_CORE_MEM_ZONE, cond->_mutex);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -73,8 +73,6 @@ extern "C" {
|
|||
|
||||
typedef struct TRI_condition_s {
|
||||
pthread_cond_t _cond;
|
||||
|
||||
bool _ownMutex;
|
||||
pthread_mutex_t* _mutex;
|
||||
}
|
||||
TRI_condition_t;
|
||||
|
|
|
@ -632,36 +632,11 @@ void TRI_InitCondition (TRI_condition_t* cond) {
|
|||
FALSE, // non-signaled initially
|
||||
NULL); // unnamed
|
||||
|
||||
cond->_ownMutex = true;
|
||||
cond->_mutex = CreateMutex(NULL, // default security attributes
|
||||
FALSE, // initially not owned
|
||||
NULL);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief initialises a new condition variable with existing mutex
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void TRI_Init2Condition (TRI_condition_t* cond, TRI_mutex_t* mutex) {
|
||||
cond->_waiters = 0;
|
||||
cond->_broadcast = false;
|
||||
|
||||
cond->_sema = CreateSemaphore(NULL, // no security
|
||||
0, // initially 0
|
||||
0x7fffffff, // max count
|
||||
NULL); // unnamed
|
||||
|
||||
InitializeCriticalSection(&cond->_lockWaiters);
|
||||
|
||||
cond->_waitersDone = CreateEvent(NULL, // no security
|
||||
FALSE, // auto-reset
|
||||
FALSE, // non-signaled initially
|
||||
NULL); // unnamed
|
||||
|
||||
cond->_ownMutex = false;
|
||||
cond->_mutex = mutex->_mutex;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief destroys a condition variable
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -670,10 +645,7 @@ void TRI_DestroyCondition (TRI_condition_t* cond) {
|
|||
CloseHandle(cond->_waitersDone);
|
||||
DeleteCriticalSection(&cond->_lockWaiters);
|
||||
CloseHandle(cond->_sema);
|
||||
|
||||
if (cond->_ownMutex) {
|
||||
CloseHandle(cond->_mutex);
|
||||
}
|
||||
CloseHandle(cond->_mutex);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -84,8 +84,6 @@ TRI_read_write_lock_t;
|
|||
typedef struct TRI_condition_s {
|
||||
CRITICAL_SECTION _lockWaiters;
|
||||
|
||||
bool _ownMutex;
|
||||
|
||||
HANDLE _waitersDone;
|
||||
HANDLE _mutex;
|
||||
HANDLE _sema;
|
||||
|
|
|
@ -300,12 +300,6 @@ void TRI_WriteUnlockReadWriteLock (TRI_read_write_lock_t* lock);
|
|||
|
||||
void TRI_InitCondition (TRI_condition_t* cond);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief initialises a new condition variable with existing mutex
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void TRI_Init2Condition (TRI_condition_t* cond, TRI_mutex_t* mutex);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief destroys a condition variable
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
Loading…
Reference in New Issue