mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-11 15:48:05 +00:00
Changed LevelDB cursors to use scoped pointers to ensure destruction when going out of scope.
This corrects a bug where an exception thrown reading from the database causes the cursor to be left open, which causes an assertion error to occur when the database is deleted (around line 938 of init.cpp).
This commit is contained in:
parent
003bbd5f76
commit
5cbda4f10f
@ -103,7 +103,7 @@ bool CBlockTreeDB::ReadLastBlockFile(int &nFile) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CCoinsViewDB::GetStats(CCoinsStats &stats) {
|
bool CCoinsViewDB::GetStats(CCoinsStats &stats) {
|
||||||
leveldb::Iterator *pcursor = db.NewIterator();
|
boost::scoped_ptr<leveldb::Iterator> pcursor(db.NewIterator());
|
||||||
pcursor->SeekToFirst();
|
pcursor->SeekToFirst();
|
||||||
|
|
||||||
CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION);
|
CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION);
|
||||||
@ -146,7 +146,6 @@ bool CCoinsViewDB::GetStats(CCoinsStats &stats) {
|
|||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete pcursor;
|
|
||||||
stats.nHeight = mapBlockIndex.find(GetBestBlock())->second->nHeight;
|
stats.nHeight = mapBlockIndex.find(GetBestBlock())->second->nHeight;
|
||||||
stats.hashSerialized = ss.GetHash();
|
stats.hashSerialized = ss.GetHash();
|
||||||
stats.nTotalAmount = nTotalAmount;
|
stats.nTotalAmount = nTotalAmount;
|
||||||
@ -178,7 +177,7 @@ bool CBlockTreeDB::ReadFlag(const std::string &name, bool &fValue) {
|
|||||||
|
|
||||||
bool CBlockTreeDB::LoadBlockIndexGuts()
|
bool CBlockTreeDB::LoadBlockIndexGuts()
|
||||||
{
|
{
|
||||||
leveldb::Iterator *pcursor = NewIterator();
|
boost::scoped_ptr<leveldb::Iterator> pcursor(NewIterator());
|
||||||
|
|
||||||
CDataStream ssKeySet(SER_DISK, CLIENT_VERSION);
|
CDataStream ssKeySet(SER_DISK, CLIENT_VERSION);
|
||||||
ssKeySet << make_pair('b', uint256(0));
|
ssKeySet << make_pair('b', uint256(0));
|
||||||
@ -224,7 +223,6 @@ bool CBlockTreeDB::LoadBlockIndexGuts()
|
|||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete pcursor;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user