removes recursive read-locks on gossip (#13973) (#13974)

ClusterInfo::tvu_peers acquires a read-lock on gossip:
https://github.com/solana-labs/solana/blob/f0e934145/core/src/cluster_info.rs#L1171-L1185
and so, ClusterInfo::repair_peers is recursively locking gossip for
read twice:
https://github.com/solana-labs/solana/blob/f0e934145/core/src/cluster_info.rs#L1202-L1223
But std::sync::RwLock is not re-entrant (recursive).

(cherry picked from commit 6706f2b3bb)

Co-authored-by: behzad nouri <behzadnouri@gmail.com>
This commit is contained in:
mergify[bot]
2020-12-06 17:32:56 +00:00
committed by GitHub
parent c1047b48fe
commit a0c1e4a6e2

View File

@ -1197,9 +1197,10 @@ impl ClusterInfo {
// self.tvu_peers() already filters on: // self.tvu_peers() already filters on:
// node.id != self.id() && // node.id != self.id() &&
// node.shred_verion == self.my_shred_version() // node.shred_verion == self.my_shred_version()
let nodes = self.tvu_peers();
let nodes = { let nodes = {
let gossip = self.gossip.read().unwrap(); let gossip = self.gossip.read().unwrap();
self.tvu_peers() nodes
.into_iter() .into_iter()
.filter(|node| { .filter(|node| {
ContactInfo::is_valid_address(&node.serve_repair) ContactInfo::is_valid_address(&node.serve_repair)