@@ -487,6 +487,10 @@ pub(super) struct PeerState<Signer: ChannelSigner> {
487487 /// Messages to send to the peer - pushed to in the same lock that they are generated in (except
488488 /// for broadcast messages, where ordering isn't as strict).
489489 pub ( super ) pending_msg_events : Vec < MessageSendEvent > ,
490+ /// The peer is currently connected (i.e. we've seen a
491+ /// [`ChannelMessageHandler::peer_connected`] and no corresponding
492+ /// [`ChannelMessageHandler::peer_disconnected`].
493+ is_connected : bool ,
490494}
491495
492496/// Stores a PaymentSecret and any other data we may need to validate an inbound payment is
@@ -6289,6 +6293,8 @@ where
62896293 & events:: MessageSendEvent :: SendGossipTimestampFilter { .. } => false ,
62906294 }
62916295 } ) ;
6296+ debug_assert ! ( peer_state. is_connected, "A disconnected peer cannot disconnect" ) ;
6297+ peer_state. is_connected = false ;
62926298 }
62936299 }
62946300 if no_channels_remain {
@@ -6319,10 +6325,14 @@ where
63196325 channel_by_id : HashMap :: new ( ) ,
63206326 latest_features : init_msg. features . clone ( ) ,
63216327 pending_msg_events : Vec :: new ( ) ,
6328+ is_connected : true ,
63226329 } ) ) ;
63236330 } ,
63246331 hash_map:: Entry :: Occupied ( e) => {
6325- e. get ( ) . lock ( ) . unwrap ( ) . latest_features = init_msg. features . clone ( ) ;
6332+ let mut peer_state = e. get ( ) . lock ( ) . unwrap ( ) ;
6333+ peer_state. latest_features = init_msg. features . clone ( ) ;
6334+ debug_assert ! ( !peer_state. is_connected, "A peer shouldn't be connected twice" ) ;
6335+ peer_state. is_connected = true ;
63266336 } ,
63276337 }
63286338 }
@@ -7341,6 +7351,7 @@ where
73417351 channel_by_id : peer_channels. remove ( & peer_pubkey) . unwrap_or ( HashMap :: new ( ) ) ,
73427352 latest_features : Readable :: read ( reader) ?,
73437353 pending_msg_events : Vec :: new ( ) ,
7354+ is_connected : false ,
73447355 } ;
73457356 per_peer_state. insert ( peer_pubkey, Mutex :: new ( peer_state) ) ;
73467357 }
@@ -8054,8 +8065,6 @@ mod tests {
80548065
80558066 let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
80568067 let payee_pubkey = nodes[ 1 ] . node . get_our_node_id ( ) ;
8057- nodes[ 0 ] . node . peer_connected ( & payee_pubkey, & msgs:: Init { features : nodes[ 1 ] . node . init_features ( ) , remote_network_address : None } ) . unwrap ( ) ;
8058- nodes[ 1 ] . node . peer_connected ( & payer_pubkey, & msgs:: Init { features : nodes[ 0 ] . node . init_features ( ) , remote_network_address : None } ) . unwrap ( ) ;
80598068
80608069 let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
80618070 let route_params = RouteParameters {
@@ -8099,8 +8108,6 @@ mod tests {
80998108
81008109 let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
81018110 let payee_pubkey = nodes[ 1 ] . node . get_our_node_id ( ) ;
8102- nodes[ 0 ] . node . peer_connected ( & payee_pubkey, & msgs:: Init { features : nodes[ 1 ] . node . init_features ( ) , remote_network_address : None } ) . unwrap ( ) ;
8103- nodes[ 1 ] . node . peer_connected ( & payer_pubkey, & msgs:: Init { features : nodes[ 0 ] . node . init_features ( ) , remote_network_address : None } ) . unwrap ( ) ;
81048111
81058112 let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
81068113 let route_params = RouteParameters {
0 commit comments