Skip to content

Commit 00483e4

Browse files
committed
swtich singleton to thread safe version
1 parent 89186b7 commit 00483e4

File tree

4 files changed

+11
-31
lines changed

4 files changed

+11
-31
lines changed

src/collection/backend/lmdb.cc

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,8 @@ LMDB::LMDB(std::string name) :
4242

4343
int LMDB::txn_begin(unsigned int flags, MDB_txn **ret) {
4444
if (!isOpen) {
45-
MDBEnvProvider* provider = MDBEnvProvider::GetInstance();
46-
m_env = provider->GetEnv();
47-
m_dbi = *(provider->GetDBI());
45+
m_env = MDBEnvProvider::GetInstance().GetEnv();
46+
m_dbi = *(MDBEnvProvider::GetInstance().GetDBI());
4847
isOpen = true;
4948
}
5049
return mdb_txn_begin(m_env, NULL, flags, ret);
@@ -502,22 +501,6 @@ void LMDB::resolveRegularExpression(const std::string& var,
502501
}
503502

504503

505-
MDBEnvProvider* MDBEnvProvider::provider_ = nullptr;
506-
507-
MDBEnvProvider* MDBEnvProvider::GetInstance() {
508-
if (provider_==nullptr) {
509-
provider_ = new MDBEnvProvider();
510-
}
511-
return provider_;
512-
}
513-
514-
void MDBEnvProvider::Finalize() {
515-
if (provider_!=nullptr) {
516-
provider_->close();
517-
provider_ = nullptr;
518-
}
519-
}
520-
521504
MDBEnvProvider::MDBEnvProvider() :
522505
m_env(NULL), initialized(false) {
523506
pthread_mutex_init(&m_lock, NULL);

src/collection/backend/lmdb.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,7 @@ namespace backend {
6666
* "Use an MDB_env* in the process which opened it, without fork()ing."
6767
*/
6868
class MDBEnvProvider {
69-
protected:
70-
static MDBEnvProvider* provider_;
71-
MDBEnvProvider();
69+
7270
public:
7371
MDBEnvProvider(MDBEnvProvider &other) = delete;
7472
void operator=(const MDBEnvProvider &) = delete;
@@ -77,11 +75,12 @@ class MDBEnvProvider {
7775
* This is the static method that controls the access to the singleton
7876
* instance. On the first run, it creates a singleton object and places it
7977
* into the static field. On subsequent runs, it returns the client existing
80-
* object stored in the static field.
78+
* object stored in the static field (Meyers Singleton implementation).
8179
*/
82-
static MDBEnvProvider* GetInstance();
83-
static void Finalize();
84-
80+
static MDBEnvProvider& GetInstance() {
81+
static MDBEnvProvider instance;
82+
return instance;
83+
}
8584
MDB_env* GetEnv();
8685
MDB_dbi* GetDBI();
8786

@@ -90,6 +89,7 @@ class MDBEnvProvider {
9089
MDB_dbi m_dbi;
9190
pthread_mutex_t m_lock;
9291

92+
MDBEnvProvider();
9393
bool initialized;
9494
void init();
9595
void close();

src/modsecurity.cc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,6 @@ ModSecurity::~ModSecurity() {
106106
delete m_ip_collection;
107107
delete m_session_collection;
108108
delete m_user_collection;
109-
#ifdef WITH_LMDB
110-
collection::backend::MDBEnvProvider::Finalize();
111-
#endif
112109
}
113110

114111

test/cppcheck_suppressions.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ functionStatic:src/engine/lua.h:71
4444
functionConst:src/utils/geo_lookup.h:49
4545
useInitializationList:src/operators/rbl.h:69
4646
constStatement:test/common/modsecurity_test.cc:82
47-
danglingTemporaryLifetime:src/modsecurity.cc:209
47+
danglingTemporaryLifetime:src/modsecurity.cc:206
4848
functionStatic:src/operators/geo_lookup.h:35
4949
duplicateBreak:src/operators/validate_utf8_encoding.cc
5050
duplicateBranch:src/request_body_processor/multipart.cc:91
5151
syntaxError:src/transaction.cc:62
5252
noConstructor:src/variables/variable.h:152
5353
duplicateBranch:src/request_body_processor/multipart.cc:93
54-
danglingTempReference:src/modsecurity.cc:209
54+
danglingTempReference:src/modsecurity.cc:206
5555
knownConditionTrueFalse:src/operators/validate_url_encoding.cc:77
5656
knownConditionTrueFalse:src/operators/verify_svnr.cc:87
5757
rethrowNoCurrentException:headers/modsecurity/transaction.h:307

0 commit comments

Comments
 (0)