@@ -815,34 +815,40 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
815815 let pending_read_buffer = [ 0 ; 50 ] . to_vec ( ) ; // Noise act two is 50 bytes
816816
817817 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+ }
846852 }
847853
848854 /// 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
865871 let pending_read_buffer = [ 0 ; 50 ] . to_vec ( ) ; // Noise act one is 50 bytes
866872
867873 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+ }
896908 }
897909
898910 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
11411153 macro_rules! insert_node_id {
11421154 ( ) => {
11431155 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 ) => {
11451157 log_trace!( self . logger, "Got second connection with {}, closing" , log_pubkey!( peer. their_node_id. unwrap( ) . 0 ) ) ;
11461158 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( ) ) ;
11471163 return Err ( PeerHandleError { } )
11481164 } ,
11491165 hash_map:: Entry :: Vacant ( entry) => {
@@ -1913,7 +1929,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
19131929 self . do_attempt_write_data ( & mut descriptor, & mut * peer, false ) ;
19141930 }
19151931 self . do_disconnect ( descriptor, & * peer, "DisconnectPeer HandleError" ) ;
1916- }
1932+ } else { debug_assert ! ( false , "Missing connection for peer" ) ; }
19171933 }
19181934 }
19191935 }
@@ -1953,7 +1969,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
19531969 let peer = peer_lock. lock ( ) . unwrap ( ) ;
19541970 if let Some ( ( node_id, _) ) = peer. their_node_id {
19551971 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" ) ;
19571974 if !peer. handshake_complete ( ) { return ; }
19581975 self . message_handler . chan_handler . peer_disconnected ( & node_id) ;
19591976 self . message_handler . onion_message_handler . peer_disconnected ( & node_id) ;
0 commit comments