From 5d51855b4dda89711cd1e9472736f730258985f0 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Fri, 21 May 2021 08:27:52 +0200 Subject: [PATCH] Merge bitcoin/bitcoin#22003: txmempool: add thread safety annotations 793b2682841b0bdd7eb93163e34728765cfe52b2 txmempool: add thread safety annotations (Anthony Towns) Pull request description: Add missing thread safety guards to CTxMempool members. ACKs for top commit: MarcoFalke: cr ACK 793b2682841b0bdd7eb93163e34728765cfe52b2 hebasto: re-ACK 793b2682841b0bdd7eb93163e34728765cfe52b2, only suggested changes since my [previous](https://github.com/bitcoin/bitcoin/pull/22003#pullrequestreview-664529633) review. Tree-SHA512: c5eb197c63375c80c325a276f322177e84e0181c94a124720b1a364e964ac223fc6fdfd89bd0e152b76959fb6b97bfbf82dd36ec105ed6e2dc045ede717df4ae --- src/test/fuzz/tx_pool.cpp | 3 ++- src/txmempool.h | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/test/fuzz/tx_pool.cpp b/src/test/fuzz/tx_pool.cpp index 451eb2cbdb..2a69f1fde5 100644 --- a/src/test/fuzz/tx_pool.cpp +++ b/src/test/fuzz/tx_pool.cpp @@ -19,8 +19,9 @@ std::vector g_outpoints_coinbase_init_mature; std::vector g_outpoints_coinbase_init_immature; struct MockedTxPool : public CTxMemPool { - void RollingFeeUpdate() + void RollingFeeUpdate() EXCLUSIVE_LOCKS_REQUIRED(!cs) { + LOCK(cs); lastRollingFeeUpdate = GetTime(); blockSinceLastRollingFeeBump = true; } diff --git a/src/txmempool.h b/src/txmempool.h index fe93c641fa..d6930ff4a6 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -472,16 +472,16 @@ class CTxMemPool protected: const int m_check_ratio; //!< Value n means that 1 times in n we check. std::atomic nTransactionsUpdated{0}; //!< Used by getblocktemplate to trigger CreateNewBlock() invocation - CBlockPolicyEstimator* minerPolicyEstimator; + CBlockPolicyEstimator* const minerPolicyEstimator; CDeterministicMNManager* m_dmnman{nullptr}; uint64_t totalTxSize GUARDED_BY(cs); //!< sum of all mempool tx' byte sizes CAmount m_total_fee GUARDED_BY(cs); //!< sum of all mempool tx's fees (NOT modified fee) uint64_t cachedInnerUsage GUARDED_BY(cs); //!< sum of dynamic memory usage of all the map elements (NOT the maps themselves) - mutable int64_t lastRollingFeeUpdate; - mutable bool blockSinceLastRollingFeeBump; - mutable double rollingMinimumFeeRate; //!< minimum fee to get into the pool, decreases exponentially + mutable int64_t lastRollingFeeUpdate GUARDED_BY(cs); + mutable bool blockSinceLastRollingFeeBump GUARDED_BY(cs); + mutable double rollingMinimumFeeRate GUARDED_BY(cs); //!< minimum fee to get into the pool, decreases exponentially mutable Epoch m_epoch GUARDED_BY(cs); void trackPackageRemoved(const CFeeRate& rate) EXCLUSIVE_LOCKS_REQUIRED(cs); @@ -589,7 +589,7 @@ private: public: indirectmap mapNextTx GUARDED_BY(cs); - std::map mapDeltas; + std::map mapDeltas GUARDED_BY(cs); /** Create a new CTxMemPool. * Sanity checks will be off by default for performance, because otherwise