From 83a0f5da0f70a0eb5c05ffeccc49e961a4fe736c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Boqin=20Qin=28=E7=A7=A6=20=E4=BC=AF=E9=92=A6=29?= Date: Thu, 4 Aug 2022 22:45:31 +0800 Subject: [PATCH] core: fix double-readlock in replay_stage (#26052) --- core/src/replay_stage.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 591be79f62..8d2fec6248 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -2898,7 +2898,7 @@ impl ReplayStage { newly_voted_pubkeys, cluster_slot_pubkeys, slot, - bank_forks, + &bank_forks.read().unwrap(), ); } @@ -3089,11 +3089,11 @@ impl ReplayStage { mut newly_voted_pubkeys: Vec, mut cluster_slot_pubkeys: Vec, fork_tip: Slot, - bank_forks: &RwLock, + bank_forks: &BankForks, ) { let mut current_leader_slot = progress.get_latest_leader_slot_must_exist(fork_tip); let mut did_newly_reach_threshold = false; - let root = bank_forks.read().unwrap().root(); + let root = bank_forks.root(); loop { // These cases mean confirmation of propagation on any earlier // leader blocks must have been reached @@ -3124,8 +3124,6 @@ impl ReplayStage { // `progress` map assert!(leader_propagated_stats.is_leader_slot); let leader_bank = bank_forks - .read() - .unwrap() .get(current_leader_slot.unwrap()) .expect("Entry in progress map must exist in BankForks") .clone(); @@ -3414,7 +3412,7 @@ impl ReplayStage { empty, vec![leader], parent_bank.slot(), - bank_forks, + &forks, ); new_banks.insert(child_slot, child_bank); }