diff --git a/src/coins.cpp b/src/coins.cpp index 8c32752a3a..8e8edcca63 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -108,10 +108,13 @@ void CCoinsViewCache::AddCoin(const COutPoint &outpoint, Coin&& coin, bool possi void CCoinsViewCache::EmplaceCoinInternalDANGER(COutPoint&& outpoint, Coin&& coin) { cachedCoinsUsage += coin.DynamicMemoryUsage(); - cacheCoins.emplace( + auto [it, inserted] = cacheCoins.emplace( std::piecewise_construct, std::forward_as_tuple(std::move(outpoint)), - std::forward_as_tuple(std::move(coin), CCoinsCacheEntry::DIRTY)); + std::forward_as_tuple(std::move(coin))); + if (inserted) { + it->second.AddFlags(CCoinsCacheEntry::DIRTY); + } } void AddCoins(CCoinsViewCache& cache, const CTransaction &tx, int nHeight, bool check_for_overwrite) { diff --git a/src/coins.h b/src/coins.h index b85c316ee5..bb1c17a887 100644 --- a/src/coins.h +++ b/src/coins.h @@ -104,7 +104,7 @@ public: struct CCoinsCacheEntry { Coin coin; // The actual cached data. - unsigned char flags; + unsigned char flags{0}; enum Flags { /** @@ -127,9 +127,8 @@ struct CCoinsCacheEntry FRESH = (1 << 1), }; - CCoinsCacheEntry() : flags(0) {} - explicit CCoinsCacheEntry(Coin&& coin_) : coin(std::move(coin_)), flags(0) {} - CCoinsCacheEntry(Coin&& coin_, unsigned char flag) : coin(std::move(coin_)), flags(flag) {} + CCoinsCacheEntry() noexcept = default; + explicit CCoinsCacheEntry(Coin&& coin_) noexcept : coin(std::move(coin_)) {} inline void AddFlags(unsigned char flags) noexcept { this->flags |= flags; } inline void ClearFlags() noexcept