@@ -46,7 +46,12 @@ int LMDB::txn_begin(unsigned int flags, MDB_txn **ret) {
46
46
m_dbi = *(MDBEnvProvider::GetInstance ().GetDBI ());
47
47
isOpen = true ;
48
48
}
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
+ }
50
55
}
51
56
52
57
void LMDB::string2val (const std::string& str, MDB_val *val) {
@@ -501,14 +506,19 @@ void LMDB::resolveRegularExpression(const std::string& var,
501
506
}
502
507
503
508
504
- MDBEnvProvider::MDBEnvProvider () : m_env(NULL ) {
509
+ MDBEnvProvider::MDBEnvProvider () : m_env(NULL ), valid(false ) {
510
+ int rc;
505
511
MDB_txn *txn;
506
512
mdb_env_create (&m_env);
507
- mdb_env_open (m_env, " ./modsec-shared-collections" ,
513
+ rc = mdb_env_open (m_env, " ./modsec-shared-collections" ,
508
514
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
+ }
512
522
}
513
523
514
524
MDB_env* MDBEnvProvider::GetEnv () {
@@ -519,6 +529,10 @@ MDB_dbi* MDBEnvProvider::GetDBI() {
519
529
return &m_dbi;
520
530
}
521
531
532
+ bool MDBEnvProvider::isValid () {
533
+ return valid;
534
+ }
535
+
522
536
MDBEnvProvider::~MDBEnvProvider () {
523
537
mdb_dbi_close (m_env, m_dbi);
524
538
mdb_env_close (m_env);
0 commit comments