From fb37954969e4f60d3e88c03ab3b308bf7af04220 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Thu, 21 Sep 2017 12:43:02 -0700 Subject: [PATCH] include the CTxWitness structure in memory usage accounting. --- src/core_memusage.h | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/core_memusage.h b/src/core_memusage.h index 7cebdd480c..38537f4af6 100644 --- a/src/core_memusage.h +++ b/src/core_memusage.h @@ -26,27 +26,49 @@ static inline size_t RecursiveDynamicUsage(const CTxOut& out) { return RecursiveDynamicUsage(out.scriptPubKey); } -//TODO Account for CTxWitness. +static inline size_t RecursiveDynamicUsage(const ::CTxInWitness& wit) { + return memusage::DynamicUsage(wit.vchIssuanceAmountRangeproof) + + memusage::DynamicUsage(wit.vchInflationKeysRangeproof); +} + +static inline size_t RecursiveDynamicUsage(const ::CTxOutWitness& wit) { + return memusage::DynamicUsage(wit.vchSurjectionproof) + + memusage::DynamicUsage(wit.vchRangeproof); +} + +static inline size_t RecursiveDynamicUsage(const ::CTxWitness& wit) { + size_t mem = memusage::DynamicUsage(wit.vtxinwit) + + memusage::DynamicUsage(wit.vtxoutwit); + for (const CTxInWitness& w : wit.vtxinwit) { + mem += RecursiveDynamicUsage(w); + } + for (const CTxOutWitness& w : wit.vtxoutwit) { + mem += RecursiveDynamicUsage(w); + } + return mem; +} static inline size_t RecursiveDynamicUsage(const CTransaction& tx) { size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout); - for (std::vector::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) { - mem += RecursiveDynamicUsage(*it); + for (const CTxIn& txi : tx.vin) { + mem += RecursiveDynamicUsage(txi); } - for (std::vector::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) { - mem += RecursiveDynamicUsage(*it); + for (const CTxOut& txo : tx.vout) { + mem += RecursiveDynamicUsage(txo); } + mem += RecursiveDynamicUsage(tx.wit); return mem; } static inline size_t RecursiveDynamicUsage(const CMutableTransaction& tx) { size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout); - for (std::vector::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) { - mem += RecursiveDynamicUsage(*it); + for (const CTxIn& txi : tx.vin) { + mem += RecursiveDynamicUsage(txi); } - for (std::vector::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) { - mem += RecursiveDynamicUsage(*it); + for (const CTxOut& txo : tx.vout) { + mem += RecursiveDynamicUsage(txo); } + mem += RecursiveDynamicUsage(tx.wit); return mem; }