|
|
|
@ -27,8 +27,6 @@ unsigned int nWalletDBUpdated;
@@ -27,8 +27,6 @@ unsigned int nWalletDBUpdated;
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
CDBEnv bitdb; |
|
|
|
|
map<string, int> mapFileUseCount; |
|
|
|
|
static map<string, Db*> mapDb; |
|
|
|
|
|
|
|
|
|
void CDBEnv::EnvShutdown() |
|
|
|
|
{ |
|
|
|
@ -129,8 +127,8 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
@@ -129,8 +127,8 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
|
|
|
|
|
throw runtime_error("env open failed"); |
|
|
|
|
|
|
|
|
|
strFile = pszFile; |
|
|
|
|
++mapFileUseCount[strFile]; |
|
|
|
|
pdb = mapDb[strFile]; |
|
|
|
|
++bitdb.mapFileUseCount[strFile]; |
|
|
|
|
pdb = bitdb.mapDb[strFile]; |
|
|
|
|
if (pdb == NULL) |
|
|
|
|
{ |
|
|
|
|
pdb = new Db(&bitdb.dbenv, 0); |
|
|
|
@ -148,7 +146,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
@@ -148,7 +146,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
|
|
|
|
|
pdb = NULL; |
|
|
|
|
{ |
|
|
|
|
LOCK(bitdb.cs_db); |
|
|
|
|
--mapFileUseCount[strFile]; |
|
|
|
|
--bitdb.mapFileUseCount[strFile]; |
|
|
|
|
} |
|
|
|
|
strFile = ""; |
|
|
|
|
throw runtime_error(strprintf("CDB() : can't open database file %s, error %d", pszFile, ret)); |
|
|
|
@ -162,7 +160,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
@@ -162,7 +160,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
|
|
|
|
|
fReadOnly = fTmp; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mapDb[strFile] = pdb; |
|
|
|
|
bitdb.mapDb[strFile] = pdb; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -189,14 +187,14 @@ void CDB::Close()
@@ -189,14 +187,14 @@ void CDB::Close()
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
LOCK(bitdb.cs_db); |
|
|
|
|
--mapFileUseCount[strFile]; |
|
|
|
|
--bitdb.mapFileUseCount[strFile]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void CloseDb(const string& strFile) |
|
|
|
|
void CDBEnv::CloseDb(const string& strFile) |
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
LOCK(bitdb.cs_db); |
|
|
|
|
LOCK(cs_db); |
|
|
|
|
if (mapDb[strFile] != NULL) |
|
|
|
|
{ |
|
|
|
|
// Close the database handle
|
|
|
|
@ -214,12 +212,12 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
@@ -214,12 +212,12 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
|
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
LOCK(bitdb.cs_db); |
|
|
|
|
if (!mapFileUseCount.count(strFile) || mapFileUseCount[strFile] == 0) |
|
|
|
|
if (!bitdb.mapFileUseCount.count(strFile) || bitdb.mapFileUseCount[strFile] == 0) |
|
|
|
|
{ |
|
|
|
|
// Flush log data to the dat file
|
|
|
|
|
CloseDb(strFile); |
|
|
|
|
bitdb.CloseDb(strFile); |
|
|
|
|
bitdb.CheckpointLSN(strFile); |
|
|
|
|
mapFileUseCount.erase(strFile); |
|
|
|
|
bitdb.mapFileUseCount.erase(strFile); |
|
|
|
|
|
|
|
|
|
bool fSuccess = true; |
|
|
|
|
printf("Rewriting %s...\n", strFile.c_str()); |
|
|
|
@ -276,7 +274,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
@@ -276,7 +274,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
|
|
|
|
|
if (fSuccess) |
|
|
|
|
{ |
|
|
|
|
db.Close(); |
|
|
|
|
CloseDb(strFile); |
|
|
|
|
bitdb.CloseDb(strFile); |
|
|
|
|
if (pdbCopy->close(0)) |
|
|
|
|
fSuccess = false; |
|
|
|
|
delete pdbCopy; |
|
|
|
|