1
0
Fork 0

simplified condition variables

This commit is contained in:
Jan Steemann 2013-11-13 19:02:22 +01:00
parent 2995914cfa
commit ccb4f19db2
5 changed files with 3 additions and 56 deletions

View File

@ -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);
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -73,8 +73,6 @@ extern "C" {
typedef struct TRI_condition_s {
pthread_cond_t _cond;
bool _ownMutex;
pthread_mutex_t* _mutex;
}
TRI_condition_t;

View File

@ -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);
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -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;

View File

@ -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
////////////////////////////////////////////////////////////////////////////////