From b3c9902dfca1f47384bf60317b9e63310c6342d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Wed, 10 Aug 2016 13:17:34 +0100 Subject: [PATCH] win: simplify uv_cond_t type PR-URL: https://github.com/libuv/libuv/pull/989 Reviewed-By: Ben Noordhuis --- include/uv-win.h | 17 +---------------- src/win/thread.c | 12 +++++------- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/include/uv-win.h b/include/uv-win.h index 74bb31a4..508d8313 100644 --- a/include/uv-win.h +++ b/include/uv-win.h @@ -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 { diff --git a/src/win/thread.c b/src/win/thread.c index e00a7b3b..e8880763 100644 --- a/src/win/thread.c +++ b/src/win/thread.c @@ -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();