aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/policy/fees.cpp6
-rw-r--r--src/policy/fees.h5
2 files changed, 7 insertions, 4 deletions
diff --git a/src/policy/fees.cpp b/src/policy/fees.cpp
index 6499dbd97f..9f576e738a 100644
--- a/src/policy/fees.cpp
+++ b/src/policy/fees.cpp
@@ -1010,8 +1010,10 @@ FeeFilterRounder::FeeFilterRounder(const CFeeRate& minIncrementalFee)
CAmount FeeFilterRounder::round(CAmount currentMinFee)
{
std::set<double>::iterator it = feeset.lower_bound(currentMinFee);
- if ((it != feeset.begin() && insecure_rand.rand32() % 3 != 0) || it == feeset.end()) {
- it--;
+ if (it == feeset.end() ||
+ (it != feeset.begin() &&
+ WITH_LOCK(m_insecure_rand_mutex, return insecure_rand.rand32()) % 3 != 0)) {
+ --it;
}
return static_cast<CAmount>(*it);
}
diff --git a/src/policy/fees.h b/src/policy/fees.h
index 6e25bb42b8..c7fa1a0b77 100644
--- a/src/policy/fees.h
+++ b/src/policy/fees.h
@@ -299,12 +299,13 @@ public:
/** Create new FeeFilterRounder */
explicit FeeFilterRounder(const CFeeRate& minIncrementalFee);
- /** Quantize a minimum fee for privacy purpose before broadcast. Not thread-safe due to use of FastRandomContext */
+ /** Quantize a minimum fee for privacy purpose before broadcast. */
CAmount round(CAmount currentMinFee);
private:
std::set<double> feeset;
- FastRandomContext insecure_rand;
+ Mutex m_insecure_rand_mutex;
+ FastRandomContext insecure_rand GUARDED_BY(m_insecure_rand_mutex);
};
#endif // BITCOIN_POLICY_FEES_H