Skip to content

Commit 29ab96d

Browse files
Use unique_ptr for dbenv (DbEnv)
1 parent f72cbf9 commit 29ab96d

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

src/wallet/db.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,22 +75,19 @@ void CDBEnv::EnvShutdown()
7575

7676
void CDBEnv::Reset()
7777
{
78-
delete dbenv;
79-
dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS);
78+
dbenv.reset(new DbEnv(DB_CXX_NO_EXCEPTIONS));
8079
fDbEnvInit = false;
8180
fMockDb = false;
8281
}
8382

84-
CDBEnv::CDBEnv() : dbenv(nullptr)
83+
CDBEnv::CDBEnv()
8584
{
8685
Reset();
8786
}
8887

8988
CDBEnv::~CDBEnv()
9089
{
9190
EnvShutdown();
92-
delete dbenv;
93-
dbenv = nullptr;
9491
}
9592

9693
void CDBEnv::Close()
@@ -182,7 +179,7 @@ CDBEnv::VerifyResult CDBEnv::Verify(const std::string& strFile, recoverFunc_type
182179
LOCK(cs_db);
183180
assert(mapFileUseCount.count(strFile) == 0);
184181

185-
Db db(dbenv, 0);
182+
Db db(dbenv.get(), 0);
186183
int result = db.verify(strFile.c_str(), nullptr, nullptr, 0);
187184
if (result == 0)
188185
return VERIFY_OK;
@@ -225,7 +222,7 @@ bool CDB::Recover(const std::string& filename, void *callbackDataIn, bool (*reco
225222
}
226223
LogPrintf("Salvage(aggressive) found %u records\n", salvagedData.size());
227224

228-
std::unique_ptr<Db> pdbCopy(new Db(bitdb.dbenv, 0));
225+
std::unique_ptr<Db> pdbCopy(new Db(bitdb.dbenv.get(), 0));
229226
int ret = pdbCopy->open(nullptr, // Txn pointer
230227
filename.c_str(), // Filename
231228
"main", // Logical db name
@@ -334,7 +331,7 @@ bool CDBEnv::Salvage(const std::string& strFile, bool fAggressive, std::vector<C
334331

335332
std::stringstream strDump;
336333

337-
Db db(dbenv, 0);
334+
Db db(dbenv.get(), 0);
338335
int result = db.verify(strFile.c_str(), nullptr, &strDump, flags);
339336
if (result == DB_VERIFY_BAD) {
340337
LogPrintf("CDBEnv::Salvage: Database salvage found errors, all data may not be recoverable.\n");
@@ -525,7 +522,7 @@ bool CDB::Rewrite(CWalletDBWrapper& dbw, const char* pszSkip)
525522
std::string strFileRes = strFile + ".rewrite";
526523
{ // surround usage of db with extra {}
527524
CDB db(dbw, "r");
528-
Db* pdbCopy = new Db(env->dbenv, 0);
525+
Db* pdbCopy = new Db(env->dbenv.get(), 0);
529526

530527
int ret = pdbCopy->open(nullptr, // Txn pointer
531528
strFileRes.c_str(), // Filename
@@ -577,10 +574,10 @@ bool CDB::Rewrite(CWalletDBWrapper& dbw, const char* pszSkip)
577574
delete pdbCopy;
578575
}
579576
if (fSuccess) {
580-
Db dbA(env->dbenv, 0);
577+
Db dbA(env->dbenv.get(), 0);
581578
if (dbA.remove(strFile.c_str(), nullptr, 0))
582579
fSuccess = false;
583-
Db dbB(env->dbenv, 0);
580+
Db dbB(env->dbenv.get(), 0);
584581
if (dbB.rename(strFileRes.c_str(), nullptr, strFile.c_str(), 0))
585582
fSuccess = false;
586583
}

src/wallet/db.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class CDBEnv
3636

3737
public:
3838
mutable CCriticalSection cs_db;
39-
DbEnv *dbenv;
39+
std::unique_ptr<DbEnv> dbenv;
4040
std::map<std::string, int> mapFileUseCount;
4141
std::map<std::string, Db*> mapDb;
4242

0 commit comments

Comments
 (0)