diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 03650a98c61fda..c81bd807dfce82 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -113,7 +113,7 @@ struct ClearErrorOnReturn { ~ClearErrorOnReturn() { ERR_clear_error(); } }; -static uv_rwlock_t* locks; +static uv_mutex_t* locks; const char* root_certs[] = { #include "node_root_certs.h" // NOLINT(build/include_order) @@ -165,29 +165,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) { - assert((mode & CRYPTO_LOCK) || (mode & CRYPTO_UNLOCK)); - assert((mode & CRYPTO_READ) || (mode & CRYPTO_WRITE)); + assert(!(mode & CRYPTO_LOCK) ^ !(mode & CRYPTO_UNLOCK)); + assert(!(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); }