Skip to content

Commit ed38eac

Browse files
committed
Release short_to_chan_info lock throughout forwarding_channel_not_found
Not doing so caused a lock order inversion between the locks `ChannelManager::best_block` and `ChannelManager::short_to_chan_info` after the addition of `test_trigger_lnd_force_close`. It turns out that we were holding the `short_to_chan_info` for longer than needed when processing HTLC forwards. We only need to acquire it to quickly obtain channel info, and there aren't any other locks within `forwarding_channel_not_found` that depend on it being held.
1 parent 94e0ece commit ed38eac

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

lightning/src/ln/channelmanager.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -4297,8 +4297,9 @@ where
42974297
}
42984298
}
42994299
}
4300-
let (counterparty_node_id, forward_chan_id) = match self.short_to_chan_info.read().unwrap().get(&short_chan_id) {
4301-
Some((cp_id, chan_id)) => (cp_id.clone(), chan_id.clone()),
4300+
let chan_info_opt = self.short_to_chan_info.read().unwrap().get(&short_chan_id).cloned();
4301+
let (counterparty_node_id, forward_chan_id) = match chan_info_opt {
4302+
Some((cp_id, chan_id)) => (cp_id, chan_id),
43024303
None => {
43034304
forwarding_channel_not_found!();
43044305
continue;

0 commit comments

Comments
 (0)