mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-14 05:45:59 +03:00
swtich singleton to thread safe version
This commit is contained in:
parent
89186b7e3a
commit
00483e4009
@ -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();
|
||||
|
@ -106,9 +106,6 @@ ModSecurity::~ModSecurity() {
|
||||
delete m_ip_collection;
|
||||
delete m_session_collection;
|
||||
delete m_user_collection;
|
||||
#ifdef WITH_LMDB
|
||||
collection::backend::MDBEnvProvider::Finalize();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -44,14 +44,14 @@ functionStatic:src/engine/lua.h:71
|
||||
functionConst:src/utils/geo_lookup.h:49
|
||||
useInitializationList:src/operators/rbl.h:69
|
||||
constStatement:test/common/modsecurity_test.cc:82
|
||||
danglingTemporaryLifetime:src/modsecurity.cc:209
|
||||
danglingTemporaryLifetime:src/modsecurity.cc:206
|
||||
functionStatic:src/operators/geo_lookup.h:35
|
||||
duplicateBreak:src/operators/validate_utf8_encoding.cc
|
||||
duplicateBranch:src/request_body_processor/multipart.cc:91
|
||||
syntaxError:src/transaction.cc:62
|
||||
noConstructor:src/variables/variable.h:152
|
||||
duplicateBranch:src/request_body_processor/multipart.cc:93
|
||||
danglingTempReference:src/modsecurity.cc:209
|
||||
danglingTempReference:src/modsecurity.cc:206
|
||||
knownConditionTrueFalse:src/operators/validate_url_encoding.cc:77
|
||||
knownConditionTrueFalse:src/operators/verify_svnr.cc:87
|
||||
rethrowNoCurrentException:headers/modsecurity/transaction.h:307
|
||||
|
Loading…
x
Reference in New Issue
Block a user