~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)
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);
}