Commit c32f067b authored by Kyle Nekritz's avatar Kyle Nekritz Committed by Facebook Github Bot

Add LOCK_SHAREDMUTEX SSLLockType.

Summary: To take advantage of read locks.

Reviewed By: siyengar

Differential Revision: D5106090

fbshipit-source-id: a32afd698e9204196aa3d23f21a7d41803b2eb66
parent b3e1ea38
......@@ -19,6 +19,7 @@
#include <folly/Format.h>
#include <folly/Memory.h>
#include <folly/Random.h>
#include <folly/SharedMutex.h>
#include <folly/SpinLock.h>
#include <folly/ThreadId.h>
......@@ -722,20 +723,32 @@ struct SSLLock {
lockType(inLockType) {
}
void lock() {
void lock(bool read) {
if (lockType == SSLContext::LOCK_MUTEX) {
mutex.lock();
} else if (lockType == SSLContext::LOCK_SPINLOCK) {
spinLock.lock();
} else if (lockType == SSLContext::LOCK_SHAREDMUTEX) {
if (read) {
sharedMutex.lock_shared();
} else {
sharedMutex.lock();
}
}
// lockType == LOCK_NONE, no-op
}
void unlock() {
void unlock(bool read) {
if (lockType == SSLContext::LOCK_MUTEX) {
mutex.unlock();
} else if (lockType == SSLContext::LOCK_SPINLOCK) {
spinLock.unlock();
} else if (lockType == SSLContext::LOCK_SHAREDMUTEX) {
if (read) {
sharedMutex.unlock_shared();
} else {
sharedMutex.unlock();
}
}
// lockType == LOCK_NONE, no-op
}
......@@ -743,6 +756,7 @@ struct SSLLock {
SSLContext::SSLLockType lockType;
folly::SpinLock spinLock{};
std::mutex mutex;
SharedMutex sharedMutex;
};
// Statics are unsafe in environments that call exit().
......@@ -763,9 +777,9 @@ static std::map<int, SSLContext::SSLLockType>& lockTypes() {
static void callbackLocking(int mode, int n, const char*, int) {
if (mode & CRYPTO_LOCK) {
locks()[size_t(n)].lock();
locks()[size_t(n)].lock(mode & CRYPTO_READ);
} else {
locks()[size_t(n)].unlock();
locks()[size_t(n)].unlock(mode & CRYPTO_READ);
}
}
......
......@@ -421,11 +421,7 @@ class SSLContext {
return ctx_;
}
enum SSLLockType {
LOCK_MUTEX,
LOCK_SPINLOCK,
LOCK_NONE
};
enum SSLLockType { LOCK_MUTEX, LOCK_SPINLOCK, LOCK_SHAREDMUTEX, LOCK_NONE };
/**
* Set preferences for how to treat locks in OpenSSL. This must be
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment