fix locking issue with new mempool limiting

Current master crashes on OSX with an exception: "boost: mutex lock failed in pthread_mutex_lock: Invalid argument"
This commit is contained in:
Jonas Schnelli 2015-10-26 14:55:17 +01:00
parent 867d6c90b8
commit 0d699fc821
No known key found for this signature in database
GPG Key ID: 29D4BCB6416F53EC
2 changed files with 9 additions and 3 deletions

View File

@ -309,7 +309,7 @@ void CTxMemPoolEntry::UpdateState(int64_t modifySize, CAmount modifyFee, int64_t
CTxMemPool::CTxMemPool(const CFeeRate& _minReasonableRelayFee) : CTxMemPool::CTxMemPool(const CFeeRate& _minReasonableRelayFee) :
nTransactionsUpdated(0) nTransactionsUpdated(0)
{ {
clear(); _clear(); //lock free clear
// Sanity checks off by default for performance, because otherwise // Sanity checks off by default for performance, because otherwise
// accepting transactions becomes O(N^2) where N is the number // accepting transactions becomes O(N^2) where N is the number
@ -546,9 +546,8 @@ void CTxMemPool::removeForBlock(const std::vector<CTransaction>& vtx, unsigned i
blockSinceLastRollingFeeBump = true; blockSinceLastRollingFeeBump = true;
} }
void CTxMemPool::clear() void CTxMemPool::_clear()
{ {
LOCK(cs);
mapLinks.clear(); mapLinks.clear();
mapTx.clear(); mapTx.clear();
mapNextTx.clear(); mapNextTx.clear();
@ -560,6 +559,12 @@ void CTxMemPool::clear()
++nTransactionsUpdated; ++nTransactionsUpdated;
} }
void CTxMemPool::clear()
{
LOCK(cs);
_clear();
}
void CTxMemPool::check(const CCoinsViewCache *pcoins) const void CTxMemPool::check(const CCoinsViewCache *pcoins) const
{ {
if (!fSanityCheck) if (!fSanityCheck)

View File

@ -375,6 +375,7 @@ public:
void removeForBlock(const std::vector<CTransaction>& vtx, unsigned int nBlockHeight, void removeForBlock(const std::vector<CTransaction>& vtx, unsigned int nBlockHeight,
std::list<CTransaction>& conflicts, bool fCurrentEstimate = true); std::list<CTransaction>& conflicts, bool fCurrentEstimate = true);
void clear(); void clear();
void _clear(); //lock free
void queryHashes(std::vector<uint256>& vtxid); void queryHashes(std::vector<uint256>& vtxid);
void pruneSpent(const uint256& hash, CCoins &coins); void pruneSpent(const uint256& hash, CCoins &coins);
unsigned int GetTransactionsUpdated() const; unsigned int GetTransactionsUpdated() const;