@@ -6677,30 +6677,37 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Writeable f
6677
6677
best_block. block_hash ( ) . write ( writer) ?;
6678
6678
}
6679
6679
6680
- let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6681
- let mut unfunded_channels = 0 ;
6682
- for ( _, channel) in channel_state. by_id . iter ( ) {
6683
- if !channel. is_funding_initiated ( ) {
6684
- unfunded_channels += 1 ;
6680
+ {
6681
+ // Take `channel_state` lock temporarily to avoid creating a lock order that requires
6682
+ // that the `forward_htlcs` lock is taken after `channel_state`
6683
+ let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6684
+ let mut unfunded_channels = 0 ;
6685
+ for ( _, channel) in channel_state. by_id . iter ( ) {
6686
+ if !channel. is_funding_initiated ( ) {
6687
+ unfunded_channels += 1 ;
6688
+ }
6685
6689
}
6686
- }
6687
- ( ( channel_state . by_id . len ( ) - unfunded_channels ) as u64 ) . write ( writer ) ? ;
6688
- for ( _ , channel) in channel_state . by_id . iter ( ) {
6689
- if channel. is_funding_initiated ( ) {
6690
- channel . write ( writer ) ? ;
6690
+ ( ( channel_state . by_id . len ( ) - unfunded_channels ) as u64 ) . write ( writer ) ? ;
6691
+ for ( _ , channel ) in channel_state . by_id . iter ( ) {
6692
+ if channel. is_funding_initiated ( ) {
6693
+ channel. write ( writer ) ? ;
6694
+ }
6691
6695
}
6692
6696
}
6693
6697
6694
- let forward_htlcs = self . forward_htlcs . lock ( ) . unwrap ( ) ;
6695
- ( forward_htlcs. len ( ) as u64 ) . write ( writer) ?;
6696
- for ( short_channel_id, pending_forwards) in forward_htlcs. iter ( ) {
6697
- short_channel_id. write ( writer) ?;
6698
- ( pending_forwards. len ( ) as u64 ) . write ( writer) ?;
6699
- for forward in pending_forwards {
6700
- forward. write ( writer) ?;
6698
+ {
6699
+ let forward_htlcs = self . forward_htlcs . lock ( ) . unwrap ( ) ;
6700
+ ( forward_htlcs. len ( ) as u64 ) . write ( writer) ?;
6701
+ for ( short_channel_id, pending_forwards) in forward_htlcs. iter ( ) {
6702
+ short_channel_id. write ( writer) ?;
6703
+ ( pending_forwards. len ( ) as u64 ) . write ( writer) ?;
6704
+ for forward in pending_forwards {
6705
+ forward. write ( writer) ?;
6706
+ }
6701
6707
}
6702
6708
}
6703
6709
6710
+ let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6704
6711
let mut htlc_purposes: Vec < & events:: PaymentPurpose > = Vec :: new ( ) ;
6705
6712
( channel_state. claimable_htlcs . len ( ) as u64 ) . write ( writer) ?;
6706
6713
for ( payment_hash, ( purpose, previous_hops) ) in channel_state. claimable_htlcs . iter ( ) {
0 commit comments