@@ -815,34 +815,40 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
815
815
let pending_read_buffer = [ 0 ; 50 ] . to_vec ( ) ; // Noise act two is 50 bytes
816
816
817
817
let mut peers = self . peers . write ( ) . unwrap ( ) ;
818
- if peers. insert ( descriptor, Mutex :: new ( Peer {
819
- channel_encryptor : peer_encryptor,
820
- their_node_id : None ,
821
- their_features : None ,
822
- their_net_address : remote_network_address,
823
-
824
- pending_outbound_buffer : LinkedList :: new ( ) ,
825
- pending_outbound_buffer_first_msg_offset : 0 ,
826
- gossip_broadcast_buffer : LinkedList :: new ( ) ,
827
- awaiting_write_event : false ,
828
-
829
- pending_read_buffer,
830
- pending_read_buffer_pos : 0 ,
831
- pending_read_is_header : false ,
832
-
833
- sync_status : InitSyncTracker :: NoSyncRequested ,
834
-
835
- msgs_sent_since_pong : 0 ,
836
- awaiting_pong_timer_tick_intervals : 0 ,
837
- received_message_since_timer_tick : false ,
838
- sent_gossip_timestamp_filter : false ,
839
-
840
- received_channel_announce_since_backlogged : false ,
841
- inbound_connection : false ,
842
- } ) ) . is_some ( ) {
843
- panic ! ( "PeerManager driver duplicated descriptors!" ) ;
844
- } ;
845
- Ok ( res)
818
+ match peers. entry ( descriptor) {
819
+ hash_map:: Entry :: Occupied ( _) => {
820
+ debug_assert ! ( false , "PeerManager driver duplicated descriptors!" ) ;
821
+ Err ( PeerHandleError { } )
822
+ } ,
823
+ hash_map:: Entry :: Vacant ( e) => {
824
+ e. insert ( Mutex :: new ( Peer {
825
+ channel_encryptor : peer_encryptor,
826
+ their_node_id : None ,
827
+ their_features : None ,
828
+ their_net_address : remote_network_address,
829
+
830
+ pending_outbound_buffer : LinkedList :: new ( ) ,
831
+ pending_outbound_buffer_first_msg_offset : 0 ,
832
+ gossip_broadcast_buffer : LinkedList :: new ( ) ,
833
+ awaiting_write_event : false ,
834
+
835
+ pending_read_buffer,
836
+ pending_read_buffer_pos : 0 ,
837
+ pending_read_is_header : false ,
838
+
839
+ sync_status : InitSyncTracker :: NoSyncRequested ,
840
+
841
+ msgs_sent_since_pong : 0 ,
842
+ awaiting_pong_timer_tick_intervals : 0 ,
843
+ received_message_since_timer_tick : false ,
844
+ sent_gossip_timestamp_filter : false ,
845
+
846
+ received_channel_announce_since_backlogged : false ,
847
+ inbound_connection : false ,
848
+ } ) ) ;
849
+ Ok ( res)
850
+ }
851
+ }
846
852
}
847
853
848
854
/// Indicates a new inbound connection has been established to a node with an optional remote
@@ -865,34 +871,40 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
865
871
let pending_read_buffer = [ 0 ; 50 ] . to_vec ( ) ; // Noise act one is 50 bytes
866
872
867
873
let mut peers = self . peers . write ( ) . unwrap ( ) ;
868
- if peers. insert ( descriptor, Mutex :: new ( Peer {
869
- channel_encryptor : peer_encryptor,
870
- their_node_id : None ,
871
- their_features : None ,
872
- their_net_address : remote_network_address,
873
-
874
- pending_outbound_buffer : LinkedList :: new ( ) ,
875
- pending_outbound_buffer_first_msg_offset : 0 ,
876
- gossip_broadcast_buffer : LinkedList :: new ( ) ,
877
- awaiting_write_event : false ,
878
-
879
- pending_read_buffer,
880
- pending_read_buffer_pos : 0 ,
881
- pending_read_is_header : false ,
882
-
883
- sync_status : InitSyncTracker :: NoSyncRequested ,
884
-
885
- msgs_sent_since_pong : 0 ,
886
- awaiting_pong_timer_tick_intervals : 0 ,
887
- received_message_since_timer_tick : false ,
888
- sent_gossip_timestamp_filter : false ,
889
-
890
- received_channel_announce_since_backlogged : false ,
891
- inbound_connection : true ,
892
- } ) ) . is_some ( ) {
893
- panic ! ( "PeerManager driver duplicated descriptors!" ) ;
894
- } ;
895
- Ok ( ( ) )
874
+ match peers. entry ( descriptor) {
875
+ hash_map:: Entry :: Occupied ( _) => {
876
+ debug_assert ! ( false , "PeerManager driver duplicated descriptors!" ) ;
877
+ Err ( PeerHandleError { } )
878
+ } ,
879
+ hash_map:: Entry :: Vacant ( e) => {
880
+ e. insert ( Mutex :: new ( Peer {
881
+ channel_encryptor : peer_encryptor,
882
+ their_node_id : None ,
883
+ their_features : None ,
884
+ their_net_address : remote_network_address,
885
+
886
+ pending_outbound_buffer : LinkedList :: new ( ) ,
887
+ pending_outbound_buffer_first_msg_offset : 0 ,
888
+ gossip_broadcast_buffer : LinkedList :: new ( ) ,
889
+ awaiting_write_event : false ,
890
+
891
+ pending_read_buffer,
892
+ pending_read_buffer_pos : 0 ,
893
+ pending_read_is_header : false ,
894
+
895
+ sync_status : InitSyncTracker :: NoSyncRequested ,
896
+
897
+ msgs_sent_since_pong : 0 ,
898
+ awaiting_pong_timer_tick_intervals : 0 ,
899
+ received_message_since_timer_tick : false ,
900
+ sent_gossip_timestamp_filter : false ,
901
+
902
+ received_channel_announce_since_backlogged : false ,
903
+ inbound_connection : true ,
904
+ } ) ) ;
905
+ Ok ( ( ) )
906
+ }
907
+ }
896
908
}
897
909
898
910
fn peer_should_read ( & self , peer : & mut Peer ) -> bool {
@@ -1141,9 +1153,13 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1141
1153
macro_rules! insert_node_id {
1142
1154
( ) => {
1143
1155
match self . node_id_to_descriptor. lock( ) . unwrap( ) . entry( peer. their_node_id. unwrap( ) . 0 ) {
1144
- hash_map:: Entry :: Occupied ( _ ) => {
1156
+ hash_map:: Entry :: Occupied ( e ) => {
1145
1157
log_trace!( self . logger, "Got second connection with {}, closing" , log_pubkey!( peer. their_node_id. unwrap( ) . 0 ) ) ;
1146
1158
peer. their_node_id = None ; // Unset so that we don't generate a peer_disconnected event
1159
+ // Check that the peers map is consistent with the
1160
+ // node_id_to_descriptor map, as this has been broken
1161
+ // before.
1162
+ debug_assert!( peers. get( e. get( ) ) . is_some( ) ) ;
1147
1163
return Err ( PeerHandleError { } )
1148
1164
} ,
1149
1165
hash_map:: Entry :: Vacant ( entry) => {
@@ -1913,7 +1929,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1913
1929
self . do_attempt_write_data ( & mut descriptor, & mut * peer, false ) ;
1914
1930
}
1915
1931
self . do_disconnect ( descriptor, & * peer, "DisconnectPeer HandleError" ) ;
1916
- }
1932
+ } else { debug_assert ! ( false , "Missing connection for peer" ) ; }
1917
1933
}
1918
1934
}
1919
1935
}
@@ -1953,7 +1969,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1953
1969
let peer = peer_lock. lock ( ) . unwrap ( ) ;
1954
1970
if let Some ( ( node_id, _) ) = peer. their_node_id {
1955
1971
log_trace ! ( self . logger, "Handling disconnection of peer {}" , log_pubkey!( node_id) ) ;
1956
- self . node_id_to_descriptor . lock ( ) . unwrap ( ) . remove ( & node_id) ;
1972
+ let removed = self . node_id_to_descriptor . lock ( ) . unwrap ( ) . remove ( & node_id) ;
1973
+ debug_assert ! ( removed. is_some( ) , "descriptor maps should be consistent" ) ;
1957
1974
if !peer. handshake_complete ( ) { return ; }
1958
1975
self . message_handler . chan_handler . peer_disconnected ( & node_id) ;
1959
1976
self . message_handler . onion_message_handler . peer_disconnected ( & node_id) ;
0 commit comments