Skip to content

Commit 4e4fb4c

Browse files
andrewtothmartinus
andcommitted
refactor: disallow setting flags in CCoinsCacheEntry constructors
No behavior change because any entries that are added in EmplaceCoinInternalDANGER have DIRTY assigned to them after, and if they are not inserted then they will not be modified as before. This prepares moving the cache entry flags field to private access. Co-Authored-By: Martin Leitner-Ankerl <[email protected]>
1 parent 8737c0c commit 4e4fb4c

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

src/coins.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,13 @@ void CCoinsViewCache::AddCoin(const COutPoint &outpoint, Coin&& coin, bool possi
108108

109109
void CCoinsViewCache::EmplaceCoinInternalDANGER(COutPoint&& outpoint, Coin&& coin) {
110110
cachedCoinsUsage += coin.DynamicMemoryUsage();
111-
cacheCoins.emplace(
111+
auto [it, inserted] = cacheCoins.emplace(
112112
std::piecewise_construct,
113113
std::forward_as_tuple(std::move(outpoint)),
114-
std::forward_as_tuple(std::move(coin), CCoinsCacheEntry::DIRTY));
114+
std::forward_as_tuple(std::move(coin)));
115+
if (inserted) {
116+
it->second.AddFlags(CCoinsCacheEntry::DIRTY);
117+
}
115118
}
116119

117120
void AddCoins(CCoinsViewCache& cache, const CTransaction &tx, int nHeight, bool check_for_overwrite) {

src/coins.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class Coin
104104
struct CCoinsCacheEntry
105105
{
106106
Coin coin; // The actual cached data.
107-
unsigned char flags;
107+
unsigned char flags{0};
108108

109109
enum Flags {
110110
/**
@@ -127,9 +127,8 @@ struct CCoinsCacheEntry
127127
FRESH = (1 << 1),
128128
};
129129

130-
CCoinsCacheEntry() : flags(0) {}
131-
explicit CCoinsCacheEntry(Coin&& coin_) : coin(std::move(coin_)), flags(0) {}
132-
CCoinsCacheEntry(Coin&& coin_, unsigned char flag) : coin(std::move(coin_)), flags(flag) {}
130+
CCoinsCacheEntry() noexcept = default;
131+
explicit CCoinsCacheEntry(Coin&& coin_) noexcept : coin(std::move(coin_)) {}
133132

134133
inline void AddFlags(unsigned char flags) noexcept { this->flags |= flags; }
135134
inline void ClearFlags() noexcept

0 commit comments

Comments
 (0)