mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-09-30 03:34:29 +03:00
swtich singleton to thread safe version
This commit is contained in:
@@ -42,9 +42,8 @@ LMDB::LMDB(std::string name) :
|
||||
|
||||
int LMDB::txn_begin(unsigned int flags, MDB_txn **ret) {
|
||||
if (!isOpen) {
|
||||
MDBEnvProvider* provider = MDBEnvProvider::GetInstance();
|
||||
m_env = provider->GetEnv();
|
||||
m_dbi = *(provider->GetDBI());
|
||||
m_env = MDBEnvProvider::GetInstance().GetEnv();
|
||||
m_dbi = *(MDBEnvProvider::GetInstance().GetDBI());
|
||||
isOpen = true;
|
||||
}
|
||||
return mdb_txn_begin(m_env, NULL, flags, ret);
|
||||
@@ -502,22 +501,6 @@ end_txn:
|
||||
}
|
||||
|
||||
|
||||
MDBEnvProvider* MDBEnvProvider::provider_ = nullptr;
|
||||
|
||||
MDBEnvProvider* MDBEnvProvider::GetInstance() {
|
||||
if (provider_==nullptr) {
|
||||
provider_ = new MDBEnvProvider();
|
||||
}
|
||||
return provider_;
|
||||
}
|
||||
|
||||
void MDBEnvProvider::Finalize() {
|
||||
if (provider_!=nullptr) {
|
||||
provider_->close();
|
||||
provider_ = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
MDBEnvProvider::MDBEnvProvider() :
|
||||
m_env(NULL), initialized(false) {
|
||||
pthread_mutex_init(&m_lock, NULL);
|
||||
|
@@ -66,9 +66,7 @@ namespace backend {
|
||||
* "Use an MDB_env* in the process which opened it, without fork()ing."
|
||||
*/
|
||||
class MDBEnvProvider {
|
||||
protected:
|
||||
static MDBEnvProvider* provider_;
|
||||
MDBEnvProvider();
|
||||
|
||||
public:
|
||||
MDBEnvProvider(MDBEnvProvider &other) = delete;
|
||||
void operator=(const MDBEnvProvider &) = delete;
|
||||
@@ -77,11 +75,12 @@ class MDBEnvProvider {
|
||||
* This is the static method that controls the access to the singleton
|
||||
* instance. On the first run, it creates a singleton object and places it
|
||||
* into the static field. On subsequent runs, it returns the client existing
|
||||
* object stored in the static field.
|
||||
* object stored in the static field (Meyers Singleton implementation).
|
||||
*/
|
||||
static MDBEnvProvider* GetInstance();
|
||||
static void Finalize();
|
||||
|
||||
static MDBEnvProvider& GetInstance() {
|
||||
static MDBEnvProvider instance;
|
||||
return instance;
|
||||
}
|
||||
MDB_env* GetEnv();
|
||||
MDB_dbi* GetDBI();
|
||||
|
||||
@@ -90,6 +89,7 @@ class MDBEnvProvider {
|
||||
MDB_dbi m_dbi;
|
||||
pthread_mutex_t m_lock;
|
||||
|
||||
MDBEnvProvider();
|
||||
bool initialized;
|
||||
void init();
|
||||
void close();
|
||||
|
Reference in New Issue
Block a user