> The RecursiveMutex cs_totalBytesRecv is only used at two places: in
> CConnman::RecordBytesRecv() to increment the nTotalBytesRecv member, and in
> CConnman::GetTotalBytesRecv() to read it. For this simple use-case, we can
> make the member std::atomic instead to achieve the same result.
https://github.com/bitcoin/bitcoin/pull/22829/commits/574cc4271ab09a4c8f8d076cb1a3a2d5b3924b73
----
> The RecursiveMutex m_addr_fetches_mutex is used at three places:
> - CConnman::AddAddrFetch()
> - CConnman::ProcessAddrFetch()
> - CConnman::ThreadOpenConnections()
> In each of the critical sections, only the the m_addr_fetches is accessed
> (and in the last case, also vAddedNodes), without any chance that within
> one section another one is called. Hence, we can use an ordinary Mutex
> instead of RecursiveMutex.
https://github.com/bitcoin/bitcoin/pull/22829/commits/7d52ff5c389643cde613d86fee33d7087f47b8b4
----
> The RecursiveMutex m_added_nodes_mutex is used at three places:
> - CConnman::GetAddedNodeInfo()
> - CConnman::AddNode()
> - CConnman::ThreadOpenConnections()
> In each of the critical sections, only the the m_added_nodes member is
> accessed (and in the last case, also m_addr_fetches), without any chance
> that within one section another one is called. Hence, we can use an
> ordinary Mutex instead of RecursiveMutex.
https://github.com/bitcoin/bitcoin/pull/22829/commits/3726a4595837b66d37f151faf1cec2796d6b74d7
----
This concludes backport of [[https://github.com/bitcoin/bitcoin/pull/22829 | core#22829]]