@@ -6548,30 +6548,37 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Writeable f
65486548 best_block. block_hash ( ) . write ( writer) ?;
65496549 }
65506550
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+ }
65566560 }
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+ }
65626566 }
65636567 }
65646568
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+ }
65726578 }
65736579 }
65746580
6581+ let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
65756582 let mut htlc_purposes: Vec < & events:: PaymentPurpose > = Vec :: new ( ) ;
65766583 ( channel_state. claimable_htlcs . len ( ) as u64 ) . write ( writer) ?;
65776584 for ( payment_hash, ( purpose, previous_hops) ) in channel_state. claimable_htlcs . iter ( ) {
0 commit comments