message: policy: Add Clang thread safety annotations for variables guarded by cs_feeEstimator
diff: @@ -228,10 +228,12 @@ public:
  unsigned int HighestTargetTracked(FeeEstimateHorizon horizon) const;
  private:
  - unsigned int nBestSeenHeight;
  - unsigned int firstRecordedHeight;
  - unsigned int historicalFirst;
  - unsigned int historicalBest;
  + mutable CCriticalSection cs_feeEstimator;
  +
  + unsigned int nBestSeenHeight GUARDED_BY(cs_feeEstimator);
  + unsigned int firstRecordedHeight GUARDED_BY(cs_feeEstimator);
  + unsigned int historicalFirst GUARDED_BY(cs_feeEstimator);
  + unsigned int historicalBest GUARDED_BY(cs_feeEstimator);
  struct TxStatsInfo
  {
  @@ -241,34 +243,32 @@ private:
  };
  // map of txids to information about that transaction
  - std::map<uint256, TxStatsInfo> mapMemPoolTxs;
  + std::map<uint256, TxStatsInfo> mapMemPoolTxs GUARDED_BY(cs_feeEstimator);
  /** Classes to track historical data on transaction confirmations */
  std::unique_ptr<TxConfirmStats> feeStats;
  std::unique_ptr<TxConfirmStats> shortStats;
  std::unique_ptr<TxConfirmStats> longStats;
  - unsigned int trackedTxs;
  - unsigned int untrackedTxs;
  + unsigned int trackedTxs GUARDED_BY(cs_feeEstimator);
  + unsigned int untrackedTxs GUARDED_BY(cs_feeEstimator);
  - std::vector<double> buckets; // The upper-bound of the range for the bucket (inclusive)
  - std::map<double, unsigned int> bucketMap; // Map of bucket upper-bound to index into all vectors by bucket
  -
  - mutable CCriticalSection cs_feeEstimator;
  + std::vector<double> buckets GUARDED_BY(cs_feeEstimator); // The upper-bound of the range for the bucket (inclusive)
  + std::map<double, unsigned int> bucketMap GUARDED_BY(cs_feeEstimator); // Map of bucket upper-bound to index into all vectors by bucket
  /** Process a transaction confirmed in a block*/
  - bool processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry* entry);
  + bool processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry* entry) EXCLUSIVE_LOCKS_REQUIRED(cs_feeEstimator);
  /** Helper for estimateSmartFee */
  - double estimateCombinedFee(unsigned int confTarget, double successThreshold, bool checkShorterHorizon, EstimationResult *result) const;
  + double estimateCombinedFee(unsigned int confTarget, double successThreshold, bool checkShorterHorizon, EstimationResult *result) const EXCLUSIVE_LOCKS_REQUIRED(cs_feeEstimator);
  /** Helper for estimateSmartFee */
  - double estimateConservativeFee(unsigned int doubleTarget, EstimationResult *result) const;
  + double estimateConservativeFee(unsigned int doubleTarget, EstimationResult *result) const EXCLUSIVE_LOCKS_REQUIRED(cs_feeEstimator);
  /** Number of blocks of data recorded while fee estimates have been running */
  - unsigned int BlockSpan() const;
  + unsigned int BlockSpan() const EXCLUSIVE_LOCKS_REQUIRED(cs_feeEstimator);
  /** Number of blocks of recorded fee estimate data represented in saved data file */
  - unsigned int HistoricalBlockSpan() const;
  + unsigned int HistoricalBlockSpan() const EXCLUSIVE_LOCKS_REQUIRED(cs_feeEstimator);
  /** Calculation of highest target that reasonable estimate can be provided for */
  - unsigned int MaxUsableEstimate() const;
  + unsigned int MaxUsableEstimate() const EXCLUSIVE_LOCKS_REQUIRED(cs_feeEstimator);
  };
  class FeeFilterRounder
  