From a0c1e4a6e20e6f48441960b9f19b4f88a191ba4d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 6 Dec 2020 17:32:56 +0000 Subject: [PATCH] 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 6706f2b3bb2958afcabbc7027182efd31407340b) Co-authored-by: behzad nouri --- core/src/cluster_info.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/cluster_info.rs b/core/src/cluster_info.rs index 28acbb2e72..66d7b2300f 100644 --- a/core/src/cluster_info.rs +++ b/core/src/cluster_info.rs @@ -1197,9 +1197,10 @@ impl ClusterInfo { // self.tvu_peers() already filters on: // node.id != self.id() && // node.shred_verion == self.my_shred_version() + let nodes = self.tvu_peers(); let nodes = { let gossip = self.gossip.read().unwrap(); - self.tvu_peers() + nodes .into_iter() .filter(|node| { ContactInfo::is_valid_address(&node.serve_repair)