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:
@ -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)
|
||||||
|
Reference in New Issue
Block a user