win: simplify uv_cond_t type

PR-URL: https://github.com/libuv/libuv/pull/989
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
Saúl Ibarra Corretgé 2016-08-10 13:17:34 +01:00
parent 058d94b2d1
commit b3c9902dfc
2 changed files with 6 additions and 23 deletions

View File

@ -215,22 +215,7 @@ typedef HANDLE uv_sem_t;
typedef CRITICAL_SECTION uv_mutex_t;
/* This condition variable implementation is based on the SetEvent solution
* (section 3.2) at http://www.cs.wustl.edu/~schmidt/win32-cv-1.html
* We could not use the SignalObjectAndWait solution (section 3.4) because
* it want the 2nd argument (type uv_mutex_t) of uv_cond_wait() and
* uv_cond_timedwait() to be HANDLEs, but we use CRITICAL_SECTIONs.
*/
typedef union {
CONDITION_VARIABLE cond_var;
struct {
unsigned int waiters_count;
CRITICAL_SECTION waiters_count_lock;
HANDLE signal_event;
HANDLE broadcast_event;
} fallback;
} uv_cond_t;
typedef CONDITION_VARIABLE uv_cond_t;
typedef union {
struct {

View File

@ -353,9 +353,7 @@ int uv_sem_trywait(uv_sem_t* sem) {
int uv_cond_init(uv_cond_t* cond) {
uv__once_init();
InitializeConditionVariable(&cond->cond_var);
InitializeConditionVariable(cond);
return 0;
}
@ -366,17 +364,17 @@ void uv_cond_destroy(uv_cond_t* cond) {
void uv_cond_signal(uv_cond_t* cond) {
WakeConditionVariable(&cond->cond_var);
WakeConditionVariable(cond);
}
void uv_cond_broadcast(uv_cond_t* cond) {
WakeAllConditionVariable(&cond->cond_var);
WakeAllConditionVariable(cond);
}
void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) {
if (!SleepConditionVariableCS(&cond->cond_var, mutex, INFINITE))
if (!SleepConditionVariableCS(cond, mutex, INFINITE))
abort();
}
@ -384,7 +382,7 @@ void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) {
int uv_cond_timedwait(uv_cond_t* cond,
uv_mutex_t* mutex,
uint64_t timeout) {
if (SleepConditionVariableCS(&cond->cond_var, mutex, (DWORD)(timeout / 1e6)))
if (SleepConditionVariableCS(cond, mutex, (DWORD)(timeout / 1e6)))
return 0;
if (GetLastError() != ERROR_TIMEOUT)
abort();