diff --git a/src/blockchain_db/lmdb/db_lmdb.cpp b/src/blockchain_db/lmdb/db_lmdb.cpp index 5126db40..201386e4 100644 --- a/src/blockchain_db/lmdb/db_lmdb.cpp +++ b/src/blockchain_db/lmdb/db_lmdb.cpp @@ -678,9 +678,13 @@ void BlockchainLMDB::open(const std::string& filename, const int mdb_flags) if (auto result = mdb_env_open(m_env, filename.c_str(), mdb_flags, 0644)) throw0(DB_ERROR(std::string("Failed to open lmdb environment: ").append(mdb_strerror(result)).c_str())); - // get a read/write MDB_txn + int txn_flags = 0; + if (mdb_flags & MDB_RDONLY) + txn_flags |= MDB_RDONLY; + + // get a read/write MDB_txn, depending on mdb_flags mdb_txn_safe txn; - if (mdb_txn_begin(m_env, NULL, 0, txn)) + if (mdb_txn_begin(m_env, NULL, txn_flags, txn)) throw0(DB_ERROR("Failed to create a transaction for the db")); // open necessary databases, and set properties as needed diff --git a/src/blockchain_utilities/blockchain_export.cpp b/src/blockchain_utilities/blockchain_export.cpp index 6f67c61c..ec885ea9 100644 --- a/src/blockchain_utilities/blockchain_export.cpp +++ b/src/blockchain_utilities/blockchain_export.cpp @@ -129,11 +129,14 @@ int main(int argc, char* argv[]) BlockchainDB* db = new BlockchainLMDB(); boost::filesystem::path folder(m_config_folder); folder /= db->get_db_name(); - LOG_PRINT_L0("Loading blockchain from folder " << folder.string() << " ..."); + int lmdb_flags = 0; + lmdb_flags |= MDB_RDONLY; const std::string filename = folder.string(); + + LOG_PRINT_L0("Loading blockchain from folder " << filename << " ..."); try { - db->open(filename); + db->open(filename, lmdb_flags); } catch (const std::exception& e) {