Skip to content

Commit 782eb36

Browse files
Don't hold per_peer_state lock during chain monitor update
For Windows build only, the `TestPersister::chain_sync_monitor_persistences` lock has a lock order before the `ChannelManager::per_peer_state` lock. This fix ensures that the `per_peer_state` lock isn't held before the `TestPersister::chain_sync_monitor_persistences` lock is acquired.
1 parent 6b12117 commit 782eb36

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1906,14 +1906,16 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
19061906
if *counterparty_node_id != chan_entry.get().get_counterparty_node_id(){
19071907
return Err(APIError::APIMisuseError { err: "The passed counterparty_node_id doesn't match the channel's counterparty node_id".to_owned() });
19081908
}
1909-
let per_peer_state = self.per_peer_state.read().unwrap();
1910-
let (shutdown_msg, monitor_update, htlcs) = match per_peer_state.get(&counterparty_node_id) {
1911-
Some(peer_state) => {
1912-
let peer_state = peer_state.lock().unwrap();
1913-
let their_features = &peer_state.latest_features;
1914-
chan_entry.get_mut().get_shutdown(&self.keys_manager, their_features, target_feerate_sats_per_1000_weight)?
1915-
},
1916-
None => return Err(APIError::ChannelUnavailable { err: format!("Not connected to node: {}", counterparty_node_id) }),
1909+
let (shutdown_msg, monitor_update, htlcs) = {
1910+
let per_peer_state = self.per_peer_state.read().unwrap();
1911+
match per_peer_state.get(&counterparty_node_id) {
1912+
Some(peer_state) => {
1913+
let peer_state = peer_state.lock().unwrap();
1914+
let their_features = &peer_state.latest_features;
1915+
chan_entry.get_mut().get_shutdown(&self.keys_manager, their_features, target_feerate_sats_per_1000_weight)?
1916+
},
1917+
None => return Err(APIError::ChannelUnavailable { err: format!("Not connected to node: {}", counterparty_node_id) }),
1918+
}
19171919
};
19181920
failed_htlcs = htlcs;
19191921

0 commit comments

Comments
 (0)