@@ -6548,30 +6548,37 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Writeable f
6548
6548
best_block. block_hash ( ) . write ( writer) ?;
6549
6549
}
6550
6550
6551
- let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6552
- let mut unfunded_channels = 0 ;
6553
- for ( _, channel) in channel_state. by_id . iter ( ) {
6554
- if !channel. is_funding_initiated ( ) {
6555
- unfunded_channels += 1 ;
6551
+ {
6552
+ // Take `channel_state` lock temporarily to avoid creating a lock order that requires
6553
+ // that the `forward_htlcs` lock is taken after `channel_state`
6554
+ let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6555
+ let mut unfunded_channels = 0 ;
6556
+ for ( _, channel) in channel_state. by_id . iter ( ) {
6557
+ if !channel. is_funding_initiated ( ) {
6558
+ unfunded_channels += 1 ;
6559
+ }
6556
6560
}
6557
- }
6558
- ( ( channel_state . by_id . len ( ) - unfunded_channels ) as u64 ) . write ( writer ) ? ;
6559
- for ( _ , channel) in channel_state . by_id . iter ( ) {
6560
- if channel. is_funding_initiated ( ) {
6561
- channel . write ( writer ) ? ;
6561
+ ( ( channel_state . by_id . len ( ) - unfunded_channels ) as u64 ) . write ( writer ) ? ;
6562
+ for ( _ , channel ) in channel_state . by_id . iter ( ) {
6563
+ if channel. is_funding_initiated ( ) {
6564
+ channel. write ( writer ) ? ;
6565
+ }
6562
6566
}
6563
6567
}
6564
6568
6565
- let forward_htlcs = self . forward_htlcs . lock ( ) . unwrap ( ) ;
6566
- ( forward_htlcs. len ( ) as u64 ) . write ( writer) ?;
6567
- for ( short_channel_id, pending_forwards) in forward_htlcs. iter ( ) {
6568
- short_channel_id. write ( writer) ?;
6569
- ( pending_forwards. len ( ) as u64 ) . write ( writer) ?;
6570
- for forward in pending_forwards {
6571
- forward. write ( writer) ?;
6569
+ {
6570
+ let forward_htlcs = self . forward_htlcs . lock ( ) . unwrap ( ) ;
6571
+ ( forward_htlcs. len ( ) as u64 ) . write ( writer) ?;
6572
+ for ( short_channel_id, pending_forwards) in forward_htlcs. iter ( ) {
6573
+ short_channel_id. write ( writer) ?;
6574
+ ( pending_forwards. len ( ) as u64 ) . write ( writer) ?;
6575
+ for forward in pending_forwards {
6576
+ forward. write ( writer) ?;
6577
+ }
6572
6578
}
6573
6579
}
6574
6580
6581
+ let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6575
6582
let mut htlc_purposes: Vec < & events:: PaymentPurpose > = Vec :: new ( ) ;
6576
6583
( channel_state. claimable_htlcs . len ( ) as u64 ) . write ( writer) ?;
6577
6584
for ( payment_hash, ( purpose, previous_hops) ) in channel_state. claimable_htlcs . iter ( ) {
0 commit comments