aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Corallo <git@bluematt.me>2015-10-21 17:41:40 -0700
committerMatt Corallo <git@bluematt.me>2015-12-01 15:50:39 -0800
commit74d0f902628472cd0cee66121ef0311eec201c40 (patch)
tree7aa06dc2b0bc863b3b60b340d3a8919283b13650
parent4077ad20d03f0ef61d48ef34b3107661b0ff8ffe (diff)
Add method to remove a tx from CCoinsViewCache if it is unchanged
-rw-r--r--src/coins.cpp9
-rw-r--r--src/coins.h6
2 files changed, 15 insertions, 0 deletions
diff --git a/src/coins.cpp b/src/coins.cpp
index 723e114708..060d6b7c5d 100644
--- a/src/coins.cpp
+++ b/src/coins.cpp
@@ -206,6 +206,15 @@ bool CCoinsViewCache::Flush() {
return fOk;
}
+void CCoinsViewCache::Uncache(const uint256& hash)
+{
+ CCoinsMap::iterator it = cacheCoins.find(hash);
+ if (it != cacheCoins.end() && it->second.flags == 0) {
+ cachedCoinsUsage -= it->second.coins.DynamicMemoryUsage();
+ cacheCoins.erase(it);
+ }
+}
+
unsigned int CCoinsViewCache::GetCacheSize() const {
return cacheCoins.size();
}
diff --git a/src/coins.h b/src/coins.h
index d174422100..5beea711b2 100644
--- a/src/coins.h
+++ b/src/coins.h
@@ -437,6 +437,12 @@ public:
*/
bool Flush();
+ /**
+ * Removes the transaction with the given hash from the cache, if it is
+ * not modified.
+ */
+ void Uncache(const uint256 &txid);
+
//! Calculate the size of the cache (in number of transactions)
unsigned int GetCacheSize() const;