@@ -46,7 +46,12 @@ int LMDB::txn_begin(unsigned int flags, MDB_txn **ret) {
4646 m_dbi = *(MDBEnvProvider::GetInstance ().GetDBI ());
4747 isOpen = true ;
4848 }
49- return mdb_txn_begin (m_env, NULL , flags, ret);
49+
50+ if (MDBEnvProvider::GetInstance ().isValid ()) {
51+ return mdb_txn_begin (m_env, NULL , flags, ret);
52+ } else {
53+ return -1 ;
54+ }
5055}
5156
5257void LMDB::string2val (const std::string& str, MDB_val *val) {
@@ -501,14 +506,19 @@ void LMDB::resolveRegularExpression(const std::string& var,
501506}
502507
503508
504- MDBEnvProvider::MDBEnvProvider () : m_env(NULL ) {
509+ MDBEnvProvider::MDBEnvProvider () : m_env(NULL ), valid(false ) {
510+ int rc;
505511 MDB_txn *txn;
506512 mdb_env_create (&m_env);
507- mdb_env_open (m_env, " ./modsec-shared-collections" ,
513+ rc = mdb_env_open (m_env, " ./modsec-shared-collections" ,
508514 MDB_WRITEMAP | MDB_NOSUBDIR, 0664 );
509- mdb_txn_begin (m_env, NULL , 0 , &txn);
510- mdb_dbi_open (txn, NULL , MDB_CREATE | MDB_DUPSORT, &m_dbi);
511- mdb_txn_commit (txn);
515+
516+ if (rc == 0 ) {
517+ valid = true ;
518+ mdb_txn_begin (m_env, NULL , 0 , &txn);
519+ mdb_dbi_open (txn, NULL , MDB_CREATE | MDB_DUPSORT, &m_dbi);
520+ mdb_txn_commit (txn);
521+ }
512522}
513523
514524MDB_env* MDBEnvProvider::GetEnv () {
@@ -519,6 +529,10 @@ MDB_dbi* MDBEnvProvider::GetDBI() {
519529 return &m_dbi;
520530}
521531
532+ bool MDBEnvProvider::isValid () {
533+ return valid;
534+ }
535+
522536MDBEnvProvider::~MDBEnvProvider () {
523537 mdb_dbi_close (m_env, m_dbi);
524538 mdb_env_close (m_env);
0 commit comments