walletdb: Introduce AddRef and RemoveRef functions

Refactor mapFileUseCount increment and decrement to separate functions
AddRef and RemoveRef
This commit is contained in:
Andrew Chow 2020-06-19 20:51:07 -04:00
parent 27b2766384
commit 71d28e7cdc
2 changed files with 24 additions and 7 deletions

View file

@ -334,7 +334,7 @@ BerkeleyDatabase::~BerkeleyDatabase()
}
}
BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode, bool fFlushOnCloseIn) : pdb(nullptr), activeTxn(nullptr), m_cursor(nullptr)
BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode, bool fFlushOnCloseIn) : pdb(nullptr), activeTxn(nullptr), m_cursor(nullptr), m_database(database)
{
fReadOnly = (!strchr(pszMode, '+') && !strchr(pszMode, 'w'));
fFlushOnClose = fFlushOnCloseIn;
@ -408,7 +408,7 @@ BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode, bo
fReadOnly = fTmp;
}
}
++env->mapFileUseCount[strFilename];
database.AddRef();
strFile = strFilename;
}
}
@ -446,11 +446,7 @@ void BerkeleyBatch::Close()
if (fFlushOnClose)
Flush();
{
LOCK(cs_db);
--env->mapFileUseCount[strFile];
}
env->m_db_in_use.notify_all();
m_database.RemoveRef();
}
void BerkeleyEnvironment::CloseDb(const std::string& strFile)
@ -846,6 +842,21 @@ bool BerkeleyBatch::HasKey(CDataStream&& key)
return ret == 0;
}
void BerkeleyDatabase::AddRef()
{
LOCK(cs_db);
++env->mapFileUseCount[strFile];
}
void BerkeleyDatabase::RemoveRef()
{
{
LOCK(cs_db);
--env->mapFileUseCount[strFile];
}
env->m_db_in_use.notify_all();
}
std::unique_ptr<BerkeleyBatch> BerkeleyDatabase::MakeBatch(const char* mode, bool flush_on_close)
{
return MakeUnique<BerkeleyBatch>(*this, mode, flush_on_close);

View file

@ -121,6 +121,11 @@ public:
*/
bool Rewrite(const char* pszSkip=nullptr);
/** Indicate the a new database user has began using the database. */
void AddRef();
/** Indicate that database user has stopped using the database and that it could be flushed or closed. */
void RemoveRef();
/** Back up the entire database to a file.
*/
bool Backup(const std::string& strDest) const;
@ -212,6 +217,7 @@ protected:
bool fReadOnly;
bool fFlushOnClose;
BerkeleyEnvironment *env;
BerkeleyDatabase& m_database;
public:
explicit BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode = "r+", bool fFlushOnCloseIn=true);