From 5b31813938356152e721396cea00b08ea62c3e7d Mon Sep 17 00:00:00 2001 From: practicalswift Date: Wed, 9 Aug 2017 16:24:12 +0200 Subject: [PATCH] Use unique_ptr for dbenv (DbEnv) --- src/wallet/db.cpp | 31 ++++++++++++++----------------- src/wallet/db.h | 2 +- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp index 9f1d0c095ead0..11fb68278ba4f 100644 --- a/src/wallet/db.cpp +++ b/src/wallet/db.cpp @@ -77,13 +77,12 @@ void CDBEnv::EnvShutdown() void CDBEnv::Reset() { - delete dbenv; - dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS); + dbenv.reset(new DbEnv(DB_CXX_NO_EXCEPTIONS)); fDbEnvInit = false; fMockDb = false; } -CDBEnv::CDBEnv() : dbenv(NULL) +CDBEnv::CDBEnv() { Reset(); } @@ -91,8 +90,6 @@ CDBEnv::CDBEnv() : dbenv(NULL) CDBEnv::~CDBEnv() { EnvShutdown(); - delete dbenv; - dbenv = NULL; } void CDBEnv::Close() @@ -184,8 +181,8 @@ CDBEnv::VerifyResult CDBEnv::Verify(const std::string& strFile, recoverFunc_type LOCK(cs_db); assert(mapFileUseCount.count(strFile) == 0); - Db db(dbenv, 0); - int result = db.verify(strFile.c_str(), NULL, NULL, 0); + Db db(dbenv.get(), 0); + int result = db.verify(strFile.c_str(), nullptr, nullptr, 0); if (result == 0) return VERIFY_OK; else if (recoverFunc == NULL) @@ -225,8 +222,8 @@ bool CDB::Recover(const std::string& filename, void *callbackDataIn, bool (*reco } LogPrintf("Salvage(aggressive) found %u records\n", salvagedData.size()); - std::unique_ptr pdbCopy(new Db(bitdb.dbenv, 0)); - int ret = pdbCopy->open(NULL, // Txn pointer + std::unique_ptr pdbCopy(new Db(bitdb.dbenv.get(), 0)); + int ret = pdbCopy->open(nullptr, // Txn pointer filename.c_str(), // Filename "main", // Logical db name DB_BTREE, // Database type @@ -326,8 +323,8 @@ bool CDBEnv::Salvage(const std::string& strFile, bool fAggressive, std::vectormapDb[strFilename]; if (pdb == nullptr) { int ret; - std::unique_ptr pdb_temp(new Db(env->dbenv, 0)); + std::unique_ptr pdb_temp(new Db(env->dbenv.get(), 0)); bool fMockDb = env->IsMock(); if (fMockDb) { @@ -517,7 +514,7 @@ bool CDB::Rewrite(CWalletDBWrapper& dbw, const char* pszSkip) std::string strFileRes = strFile + ".rewrite"; { // surround usage of db with extra {} CDB db(dbw, "r"); - Db* pdbCopy = new Db(env->dbenv, 0); + Db* pdbCopy = new Db(env->dbenv.get(), 0); int ret = pdbCopy->open(NULL, // Txn pointer strFileRes.c_str(), // Filename @@ -569,11 +566,11 @@ bool CDB::Rewrite(CWalletDBWrapper& dbw, const char* pszSkip) delete pdbCopy; } if (fSuccess) { - Db dbA(env->dbenv, 0); - if (dbA.remove(strFile.c_str(), NULL, 0)) + Db dbA(env->dbenv.get(), 0); + if (dbA.remove(strFile.c_str(), nullptr, 0)) fSuccess = false; - Db dbB(env->dbenv, 0); - if (dbB.rename(strFileRes.c_str(), NULL, strFile.c_str(), 0)) + Db dbB(env->dbenv.get(), 0); + if (dbB.rename(strFileRes.c_str(), nullptr, strFile.c_str(), 0)) fSuccess = false; } if (!fSuccess) diff --git a/src/wallet/db.h b/src/wallet/db.h index 948b9ffa8af8b..a3e0c288cdef0 100644 --- a/src/wallet/db.h +++ b/src/wallet/db.h @@ -37,7 +37,7 @@ class CDBEnv public: mutable RecursiveMutex cs_db; - DbEnv *dbenv; + std::unique_ptr dbenv; std::map mapFileUseCount; std::map mapDb;