mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-12 21:00:36 +02:00
walletdb: Introduce AddRef and RemoveRef functions
Refactor mapFileUseCount increment and decrement to separate functions AddRef and RemoveRef
This commit is contained in:
parent
27b2766384
commit
71d28e7cdc
@ -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'));
|
fReadOnly = (!strchr(pszMode, '+') && !strchr(pszMode, 'w'));
|
||||||
fFlushOnClose = fFlushOnCloseIn;
|
fFlushOnClose = fFlushOnCloseIn;
|
||||||
@ -408,7 +408,7 @@ BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode, bo
|
|||||||
fReadOnly = fTmp;
|
fReadOnly = fTmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++env->mapFileUseCount[strFilename];
|
database.AddRef();
|
||||||
strFile = strFilename;
|
strFile = strFilename;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -446,11 +446,7 @@ void BerkeleyBatch::Close()
|
|||||||
if (fFlushOnClose)
|
if (fFlushOnClose)
|
||||||
Flush();
|
Flush();
|
||||||
|
|
||||||
{
|
m_database.RemoveRef();
|
||||||
LOCK(cs_db);
|
|
||||||
--env->mapFileUseCount[strFile];
|
|
||||||
}
|
|
||||||
env->m_db_in_use.notify_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BerkeleyEnvironment::CloseDb(const std::string& strFile)
|
void BerkeleyEnvironment::CloseDb(const std::string& strFile)
|
||||||
@ -846,6 +842,21 @@ bool BerkeleyBatch::HasKey(CDataStream&& key)
|
|||||||
return ret == 0;
|
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)
|
std::unique_ptr<BerkeleyBatch> BerkeleyDatabase::MakeBatch(const char* mode, bool flush_on_close)
|
||||||
{
|
{
|
||||||
return MakeUnique<BerkeleyBatch>(*this, mode, flush_on_close);
|
return MakeUnique<BerkeleyBatch>(*this, mode, flush_on_close);
|
||||||
|
@ -121,6 +121,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool Rewrite(const char* pszSkip=nullptr);
|
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.
|
/** Back up the entire database to a file.
|
||||||
*/
|
*/
|
||||||
bool Backup(const std::string& strDest) const;
|
bool Backup(const std::string& strDest) const;
|
||||||
@ -212,6 +217,7 @@ protected:
|
|||||||
bool fReadOnly;
|
bool fReadOnly;
|
||||||
bool fFlushOnClose;
|
bool fFlushOnClose;
|
||||||
BerkeleyEnvironment *env;
|
BerkeleyEnvironment *env;
|
||||||
|
BerkeleyDatabase& m_database;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode = "r+", bool fFlushOnCloseIn=true);
|
explicit BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode = "r+", bool fFlushOnCloseIn=true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user