@@ -6600,46 +6600,44 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Writeable f
6600
6600
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
6601
6601
let _consistency_lock = self . total_consistency_lock . write ( ) . unwrap ( ) ;
6602
6602
6603
+ let forward_htlcs = self . forward_htlcs . lock ( ) . unwrap ( ) ;
6604
+ let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6605
+ let per_peer_state = self . per_peer_state . write ( ) . unwrap ( ) ;
6606
+ let peer_states = per_peer_state. iter ( ) . map ( |( peer_pubkey, peer_state_mutex) | ( peer_pubkey, peer_state_mutex. lock ( ) . unwrap ( ) ) ) . collect :: < Vec < ( & PublicKey , MutexGuard < ' _ , PeerState > ) > > ( ) ;
6607
+ let pending_inbound_payments = self . pending_inbound_payments . lock ( ) . unwrap ( ) ;
6608
+ let pending_outbound_payments = self . pending_outbound_payments . lock ( ) . unwrap ( ) ;
6609
+ let best_block = self . best_block . write ( ) . unwrap ( ) ;
6610
+ let events = self . pending_events . lock ( ) . unwrap ( ) ;
6611
+ let background_events = self . pending_background_events . lock ( ) . unwrap ( ) ;
6612
+
6603
6613
write_ver_prefix ! ( writer, SERIALIZATION_VERSION , MIN_SERIALIZATION_VERSION ) ;
6604
6614
6605
6615
self . genesis_hash . write ( writer) ?;
6606
- {
6607
- let best_block = self . best_block . read ( ) . unwrap ( ) ;
6608
- best_block. height ( ) . write ( writer) ?;
6609
- best_block. block_hash ( ) . write ( writer) ?;
6610
- }
6616
+ best_block. height ( ) . write ( writer) ?;
6617
+ best_block. block_hash ( ) . write ( writer) ?;
6611
6618
6612
- {
6613
- // Take `channel_state` lock temporarily to avoid creating a lock order that requires
6614
- // that the `forward_htlcs` lock is taken after `channel_state`
6615
- let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6616
- let mut unfunded_channels = 0 ;
6617
- for ( _, channel) in channel_state. by_id . iter ( ) {
6618
- if !channel. is_funding_initiated ( ) {
6619
- unfunded_channels += 1 ;
6620
- }
6619
+ let mut unfunded_channels = 0 ;
6620
+ for ( _, channel) in channel_state. by_id . iter ( ) {
6621
+ if !channel. is_funding_initiated ( ) {
6622
+ unfunded_channels += 1 ;
6621
6623
}
6622
- ( ( channel_state . by_id . len ( ) - unfunded_channels ) as u64 ) . write ( writer ) ? ;
6623
- for ( _ , channel ) in channel_state. by_id . iter ( ) {
6624
- if channel. is_funding_initiated ( ) {
6625
- channel. write ( writer ) ? ;
6626
- }
6624
+ }
6625
+ ( ( channel_state. by_id . len ( ) - unfunded_channels ) as u64 ) . write ( writer ) ? ;
6626
+ for ( _ , channel) in channel_state . by_id . iter ( ) {
6627
+ if channel. is_funding_initiated ( ) {
6628
+ channel . write ( writer ) ? ;
6627
6629
}
6628
6630
}
6629
6631
6630
- {
6631
- let forward_htlcs = self . forward_htlcs . lock ( ) . unwrap ( ) ;
6632
- ( forward_htlcs. len ( ) as u64 ) . write ( writer) ?;
6633
- for ( short_channel_id, pending_forwards) in forward_htlcs. iter ( ) {
6634
- short_channel_id. write ( writer) ?;
6635
- ( pending_forwards. len ( ) as u64 ) . write ( writer) ?;
6636
- for forward in pending_forwards {
6637
- forward. write ( writer) ?;
6638
- }
6632
+ ( forward_htlcs. len ( ) as u64 ) . write ( writer) ?;
6633
+ for ( short_channel_id, pending_forwards) in forward_htlcs. iter ( ) {
6634
+ short_channel_id. write ( writer) ?;
6635
+ ( pending_forwards. len ( ) as u64 ) . write ( writer) ?;
6636
+ for forward in pending_forwards {
6637
+ forward. write ( writer) ?;
6639
6638
}
6640
6639
}
6641
6640
6642
- let channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
6643
6641
let mut htlc_purposes: Vec < & events:: PaymentPurpose > = Vec :: new ( ) ;
6644
6642
( channel_state. claimable_htlcs . len ( ) as u64 ) . write ( writer) ?;
6645
6643
for ( payment_hash, ( purpose, previous_hops) ) in channel_state. claimable_htlcs . iter ( ) {
@@ -6651,23 +6649,17 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Writeable f
6651
6649
htlc_purposes. push ( purpose) ;
6652
6650
}
6653
6651
6654
- let per_peer_state = self . per_peer_state . write ( ) . unwrap ( ) ;
6655
6652
( per_peer_state. len ( ) as u64 ) . write ( writer) ?;
6656
- for ( peer_pubkey, peer_state_mutex ) in per_peer_state . iter ( ) {
6653
+ for ( peer_pubkey, peer_state ) in peer_states . iter ( ) {
6657
6654
peer_pubkey. write ( writer) ?;
6658
- let peer_state = peer_state_mutex. lock ( ) . unwrap ( ) ;
6659
6655
peer_state. latest_features . write ( writer) ?;
6660
6656
}
6661
6657
6662
- let pending_inbound_payments = self . pending_inbound_payments . lock ( ) . unwrap ( ) ;
6663
- let pending_outbound_payments = self . pending_outbound_payments . lock ( ) . unwrap ( ) ;
6664
- let events = self . pending_events . lock ( ) . unwrap ( ) ;
6665
6658
( events. len ( ) as u64 ) . write ( writer) ?;
6666
6659
for event in events. iter ( ) {
6667
6660
event. write ( writer) ?;
6668
6661
}
6669
6662
6670
- let background_events = self . pending_background_events . lock ( ) . unwrap ( ) ;
6671
6663
( background_events. len ( ) as u64 ) . write ( writer) ?;
6672
6664
for event in background_events. iter ( ) {
6673
6665
match event {
0 commit comments