diff --git a/src/node_crypto.cc b/src/node_crypto.cc index bf1f369d2bb96d..40f065e6871a9c 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -123,7 +123,7 @@ struct ClearErrorOnReturn { ~ClearErrorOnReturn() { ERR_clear_error(); } }; -static uv_rwlock_t* locks; +static uv_mutex_t* locks; const char* const root_certs[] = { #include "node_root_certs.h" // NOLINT(build/include_order) @@ -178,29 +178,22 @@ static void crypto_lock_init(void) { int i, n; n = CRYPTO_num_locks(); - locks = new uv_rwlock_t[n]; + locks = new uv_mutex_t[n]; for (i = 0; i < n; i++) - if (uv_rwlock_init(locks + i)) + if (uv_mutex_init(locks + i)) abort(); } static void crypto_lock_cb(int mode, int n, const char* file, int line) { - CHECK((mode & CRYPTO_LOCK) || (mode & CRYPTO_UNLOCK)); - CHECK((mode & CRYPTO_READ) || (mode & CRYPTO_WRITE)); + CHECK(!(mode & CRYPTO_LOCK) ^ !(mode & CRYPTO_UNLOCK)); + CHECK(!(mode & CRYPTO_READ) ^ !(mode & CRYPTO_WRITE)); - if (mode & CRYPTO_LOCK) { - if (mode & CRYPTO_READ) - uv_rwlock_rdlock(locks + n); - else - uv_rwlock_wrlock(locks + n); - } else { - if (mode & CRYPTO_READ) - uv_rwlock_rdunlock(locks + n); - else - uv_rwlock_wrunlock(locks + n); - } + if (mode & CRYPTO_LOCK) + uv_mutex_lock(locks + n); + else + uv_mutex_unlock(locks + n); }