diff options
Diffstat (limited to 'deps/uv/src/win/thread.c')
-rw-r--r-- | deps/uv/src/win/thread.c | 145 |
1 files changed, 73 insertions, 72 deletions
diff --git a/deps/uv/src/win/thread.c b/deps/uv/src/win/thread.c index 993d66162c..9d273a56e7 100644 --- a/deps/uv/src/win/thread.c +++ b/deps/uv/src/win/thread.c @@ -30,53 +30,43 @@ #define HAVE_SRWLOCK_API() (pTryAcquireSRWLockShared != NULL) #define HAVE_CONDVAR_API() (pInitializeConditionVariable != NULL) -#ifdef _MSC_VER /* msvc */ -# define inline __inline -# define NOINLINE __declspec (noinline) -#else /* gcc */ -# define inline inline -# define NOINLINE __attribute__ ((noinline)) -#endif - - -inline static int uv__rwlock_srwlock_init(uv_rwlock_t* rwlock); -inline static void uv__rwlock_srwlock_destroy(uv_rwlock_t* rwlock); -inline static void uv__rwlock_srwlock_rdlock(uv_rwlock_t* rwlock); -inline static int uv__rwlock_srwlock_tryrdlock(uv_rwlock_t* rwlock); -inline static void uv__rwlock_srwlock_rdunlock(uv_rwlock_t* rwlock); -inline static void uv__rwlock_srwlock_wrlock(uv_rwlock_t* rwlock); -inline static int uv__rwlock_srwlock_trywrlock(uv_rwlock_t* rwlock); -inline static void uv__rwlock_srwlock_wrunlock(uv_rwlock_t* rwlock); - -inline static int uv__rwlock_fallback_init(uv_rwlock_t* rwlock); -inline static void uv__rwlock_fallback_destroy(uv_rwlock_t* rwlock); -inline static void uv__rwlock_fallback_rdlock(uv_rwlock_t* rwlock); -inline static int uv__rwlock_fallback_tryrdlock(uv_rwlock_t* rwlock); -inline static void uv__rwlock_fallback_rdunlock(uv_rwlock_t* rwlock); -inline static void uv__rwlock_fallback_wrlock(uv_rwlock_t* rwlock); -inline static int uv__rwlock_fallback_trywrlock(uv_rwlock_t* rwlock); -inline static void uv__rwlock_fallback_wrunlock(uv_rwlock_t* rwlock); - - -inline static int uv_cond_fallback_init(uv_cond_t* cond); -inline static void uv_cond_fallback_destroy(uv_cond_t* cond); -inline static void uv_cond_fallback_signal(uv_cond_t* cond); -inline static void uv_cond_fallback_broadcast(uv_cond_t* cond); -inline static void uv_cond_fallback_wait(uv_cond_t* cond, uv_mutex_t* mutex); -inline static int uv_cond_fallback_timedwait(uv_cond_t* cond, +static int uv__rwlock_srwlock_init(uv_rwlock_t* rwlock); +static void uv__rwlock_srwlock_destroy(uv_rwlock_t* rwlock); +static void uv__rwlock_srwlock_rdlock(uv_rwlock_t* rwlock); +static int uv__rwlock_srwlock_tryrdlock(uv_rwlock_t* rwlock); +static void uv__rwlock_srwlock_rdunlock(uv_rwlock_t* rwlock); +static void uv__rwlock_srwlock_wrlock(uv_rwlock_t* rwlock); +static int uv__rwlock_srwlock_trywrlock(uv_rwlock_t* rwlock); +static void uv__rwlock_srwlock_wrunlock(uv_rwlock_t* rwlock); + +static int uv__rwlock_fallback_init(uv_rwlock_t* rwlock); +static void uv__rwlock_fallback_destroy(uv_rwlock_t* rwlock); +static void uv__rwlock_fallback_rdlock(uv_rwlock_t* rwlock); +static int uv__rwlock_fallback_tryrdlock(uv_rwlock_t* rwlock); +static void uv__rwlock_fallback_rdunlock(uv_rwlock_t* rwlock); +static void uv__rwlock_fallback_wrlock(uv_rwlock_t* rwlock); +static int uv__rwlock_fallback_trywrlock(uv_rwlock_t* rwlock); +static void uv__rwlock_fallback_wrunlock(uv_rwlock_t* rwlock); + + +static int uv_cond_fallback_init(uv_cond_t* cond); +static void uv_cond_fallback_destroy(uv_cond_t* cond); +static void uv_cond_fallback_signal(uv_cond_t* cond); +static void uv_cond_fallback_broadcast(uv_cond_t* cond); +static void uv_cond_fallback_wait(uv_cond_t* cond, uv_mutex_t* mutex); +static int uv_cond_fallback_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout); -inline static int uv_cond_condvar_init(uv_cond_t* cond); -inline static void uv_cond_condvar_destroy(uv_cond_t* cond); -inline static void uv_cond_condvar_signal(uv_cond_t* cond); -inline static void uv_cond_condvar_broadcast(uv_cond_t* cond); -inline static void uv_cond_condvar_wait(uv_cond_t* cond, uv_mutex_t* mutex); -inline static int uv_cond_condvar_timedwait(uv_cond_t* cond, +static int uv_cond_condvar_init(uv_cond_t* cond); +static void uv_cond_condvar_destroy(uv_cond_t* cond); +static void uv_cond_condvar_signal(uv_cond_t* cond); +static void uv_cond_condvar_broadcast(uv_cond_t* cond); +static void uv_cond_condvar_wait(uv_cond_t* cond, uv_mutex_t* mutex); +static int uv_cond_condvar_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout); -static NOINLINE void uv__once_inner(uv_once_t* guard, - void (*callback)(void)) { +static void uv__once_inner(uv_once_t* guard, void (*callback)(void)) { DWORD result; HANDLE existing_event, created_event; @@ -185,7 +175,18 @@ int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) { ResumeThread(thread); } - return err; + switch (err) { + case 0: + return 0; + case EACCES: + return UV_EACCES; + case EAGAIN: + return UV_EAGAIN; + case EINVAL: + return UV_EINVAL; + } + + return UV_EIO; } @@ -346,23 +347,23 @@ int uv_sem_trywait(uv_sem_t* sem) { } -inline static int uv__rwlock_srwlock_init(uv_rwlock_t* rwlock) { +static int uv__rwlock_srwlock_init(uv_rwlock_t* rwlock) { pInitializeSRWLock(&rwlock->srwlock_); return 0; } -inline static void uv__rwlock_srwlock_destroy(uv_rwlock_t* rwlock) { +static void uv__rwlock_srwlock_destroy(uv_rwlock_t* rwlock) { (void) rwlock; } -inline static void uv__rwlock_srwlock_rdlock(uv_rwlock_t* rwlock) { +static void uv__rwlock_srwlock_rdlock(uv_rwlock_t* rwlock) { pAcquireSRWLockShared(&rwlock->srwlock_); } -inline static int uv__rwlock_srwlock_tryrdlock(uv_rwlock_t* rwlock) { +static int uv__rwlock_srwlock_tryrdlock(uv_rwlock_t* rwlock) { if (pTryAcquireSRWLockShared(&rwlock->srwlock_)) return 0; else @@ -370,17 +371,17 @@ inline static int uv__rwlock_srwlock_tryrdlock(uv_rwlock_t* rwlock) { } -inline static void uv__rwlock_srwlock_rdunlock(uv_rwlock_t* rwlock) { +static void uv__rwlock_srwlock_rdunlock(uv_rwlock_t* rwlock) { pReleaseSRWLockShared(&rwlock->srwlock_); } -inline static void uv__rwlock_srwlock_wrlock(uv_rwlock_t* rwlock) { +static void uv__rwlock_srwlock_wrlock(uv_rwlock_t* rwlock) { pAcquireSRWLockExclusive(&rwlock->srwlock_); } -inline static int uv__rwlock_srwlock_trywrlock(uv_rwlock_t* rwlock) { +static int uv__rwlock_srwlock_trywrlock(uv_rwlock_t* rwlock) { if (pTryAcquireSRWLockExclusive(&rwlock->srwlock_)) return 0; else @@ -388,12 +389,12 @@ inline static int uv__rwlock_srwlock_trywrlock(uv_rwlock_t* rwlock) { } -inline static void uv__rwlock_srwlock_wrunlock(uv_rwlock_t* rwlock) { +static void uv__rwlock_srwlock_wrunlock(uv_rwlock_t* rwlock) { pReleaseSRWLockExclusive(&rwlock->srwlock_); } -inline static int uv__rwlock_fallback_init(uv_rwlock_t* rwlock) { +static int uv__rwlock_fallback_init(uv_rwlock_t* rwlock) { int err; err = uv_mutex_init(&rwlock->fallback_.read_mutex_); @@ -412,13 +413,13 @@ inline static int uv__rwlock_fallback_init(uv_rwlock_t* rwlock) { } -inline static void uv__rwlock_fallback_destroy(uv_rwlock_t* rwlock) { +static void uv__rwlock_fallback_destroy(uv_rwlock_t* rwlock) { uv_mutex_destroy(&rwlock->fallback_.read_mutex_); uv_mutex_destroy(&rwlock->fallback_.write_mutex_); } -inline static void uv__rwlock_fallback_rdlock(uv_rwlock_t* rwlock) { +static void uv__rwlock_fallback_rdlock(uv_rwlock_t* rwlock) { uv_mutex_lock(&rwlock->fallback_.read_mutex_); if (++rwlock->fallback_.num_readers_ == 1) @@ -428,7 +429,7 @@ inline static void uv__rwlock_fallback_rdlock(uv_rwlock_t* rwlock) { } -inline static int uv__rwlock_fallback_tryrdlock(uv_rwlock_t* rwlock) { +static int uv__rwlock_fallback_tryrdlock(uv_rwlock_t* rwlock) { int err; err = uv_mutex_trylock(&rwlock->fallback_.read_mutex_); @@ -449,7 +450,7 @@ out: } -inline static void uv__rwlock_fallback_rdunlock(uv_rwlock_t* rwlock) { +static void uv__rwlock_fallback_rdunlock(uv_rwlock_t* rwlock) { uv_mutex_lock(&rwlock->fallback_.read_mutex_); if (--rwlock->fallback_.num_readers_ == 0) @@ -459,17 +460,17 @@ inline static void uv__rwlock_fallback_rdunlock(uv_rwlock_t* rwlock) { } -inline static void uv__rwlock_fallback_wrlock(uv_rwlock_t* rwlock) { +static void uv__rwlock_fallback_wrlock(uv_rwlock_t* rwlock) { uv_mutex_lock(&rwlock->fallback_.write_mutex_); } -inline static int uv__rwlock_fallback_trywrlock(uv_rwlock_t* rwlock) { +static int uv__rwlock_fallback_trywrlock(uv_rwlock_t* rwlock) { return uv_mutex_trylock(&rwlock->fallback_.write_mutex_); } -inline static void uv__rwlock_fallback_wrunlock(uv_rwlock_t* rwlock) { +static void uv__rwlock_fallback_wrunlock(uv_rwlock_t* rwlock) { uv_mutex_unlock(&rwlock->fallback_.write_mutex_); } @@ -482,7 +483,7 @@ inline static void uv__rwlock_fallback_wrunlock(uv_rwlock_t* rwlock) { * uv_cond_timedwait() to be HANDLEs, but we use CRITICAL_SECTIONs. */ -inline static int uv_cond_fallback_init(uv_cond_t* cond) { +static int uv_cond_fallback_init(uv_cond_t* cond) { int err; /* Initialize the count to 0. */ @@ -520,7 +521,7 @@ error2: } -inline static int uv_cond_condvar_init(uv_cond_t* cond) { +static int uv_cond_condvar_init(uv_cond_t* cond) { pInitializeConditionVariable(&cond->cond_var); return 0; } @@ -536,7 +537,7 @@ int uv_cond_init(uv_cond_t* cond) { } -inline static void uv_cond_fallback_destroy(uv_cond_t* cond) { +static void uv_cond_fallback_destroy(uv_cond_t* cond) { if (!CloseHandle(cond->fallback.broadcast_event)) abort(); if (!CloseHandle(cond->fallback.signal_event)) @@ -545,7 +546,7 @@ inline static void uv_cond_fallback_destroy(uv_cond_t* cond) { } -inline static void uv_cond_condvar_destroy(uv_cond_t* cond) { +static void uv_cond_condvar_destroy(uv_cond_t* cond) { /* nothing to do */ } @@ -558,7 +559,7 @@ void uv_cond_destroy(uv_cond_t* cond) { } -inline static void uv_cond_fallback_signal(uv_cond_t* cond) { +static void uv_cond_fallback_signal(uv_cond_t* cond) { int have_waiters; /* Avoid race conditions. */ @@ -571,7 +572,7 @@ inline static void uv_cond_fallback_signal(uv_cond_t* cond) { } -inline static void uv_cond_condvar_signal(uv_cond_t* cond) { +static void uv_cond_condvar_signal(uv_cond_t* cond) { pWakeConditionVariable(&cond->cond_var); } @@ -584,7 +585,7 @@ void uv_cond_signal(uv_cond_t* cond) { } -inline static void uv_cond_fallback_broadcast(uv_cond_t* cond) { +static void uv_cond_fallback_broadcast(uv_cond_t* cond) { int have_waiters; /* Avoid race conditions. */ @@ -597,7 +598,7 @@ inline static void uv_cond_fallback_broadcast(uv_cond_t* cond) { } -inline static void uv_cond_condvar_broadcast(uv_cond_t* cond) { +static void uv_cond_condvar_broadcast(uv_cond_t* cond) { pWakeAllConditionVariable(&cond->cond_var); } @@ -610,7 +611,7 @@ void uv_cond_broadcast(uv_cond_t* cond) { } -inline int uv_cond_wait_helper(uv_cond_t* cond, uv_mutex_t* mutex, +static int uv_cond_wait_helper(uv_cond_t* cond, uv_mutex_t* mutex, DWORD dwMilliseconds) { DWORD result; int last_waiter; @@ -660,13 +661,13 @@ inline int uv_cond_wait_helper(uv_cond_t* cond, uv_mutex_t* mutex, } -inline static void uv_cond_fallback_wait(uv_cond_t* cond, uv_mutex_t* mutex) { +static void uv_cond_fallback_wait(uv_cond_t* cond, uv_mutex_t* mutex) { if (uv_cond_wait_helper(cond, mutex, INFINITE)) abort(); } -inline static void uv_cond_condvar_wait(uv_cond_t* cond, uv_mutex_t* mutex) { +static void uv_cond_condvar_wait(uv_cond_t* cond, uv_mutex_t* mutex) { if (!pSleepConditionVariableCS(&cond->cond_var, mutex, INFINITE)) abort(); } @@ -680,13 +681,13 @@ void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) { } -inline static int uv_cond_fallback_timedwait(uv_cond_t* cond, +static int uv_cond_fallback_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) { return uv_cond_wait_helper(cond, mutex, (DWORD)(timeout / 1e6)); } -inline static int uv_cond_condvar_timedwait(uv_cond_t* cond, +static int uv_cond_condvar_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) { if (pSleepConditionVariableCS(&cond->cond_var, mutex, (DWORD)(timeout / 1e6))) return 0; |