@@ -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
@@ -6294,6 +6298,8 @@ where
62946298 & events:: MessageSendEvent :: SendGossipTimestampFilter { .. } => false ,
62956299 }
62966300 } ) ;
6301+ debug_assert ! ( peer_state. is_connected, "A disconnected peer cannot disconnect" ) ;
6302+ peer_state. is_connected = false ;
62976303 }
62986304 }
62996305 if no_channels_remain {
@@ -6324,10 +6330,14 @@ where
63246330 channel_by_id : HashMap :: new ( ) ,
63256331 latest_features : init_msg. features . clone ( ) ,
63266332 pending_msg_events : Vec :: new ( ) ,
6333+ is_connected : true ,
63276334 } ) ) ;
63286335 } ,
63296336 hash_map:: Entry :: Occupied ( e) => {
6330- e. get ( ) . lock ( ) . unwrap ( ) . latest_features = init_msg. features . clone ( ) ;
6337+ let mut peer_state = e. get ( ) . lock ( ) . unwrap ( ) ;
6338+ peer_state. latest_features = init_msg. features . clone ( ) ;
6339+ debug_assert ! ( !peer_state. is_connected, "A peer shouldn't be connected twice" ) ;
6340+ peer_state. is_connected = true ;
63316341 } ,
63326342 }
63336343 }
@@ -7346,6 +7356,7 @@ where
73467356 channel_by_id : peer_channels. remove ( & peer_pubkey) . unwrap_or ( HashMap :: new ( ) ) ,
73477357 latest_features : Readable :: read ( reader) ?,
73487358 pending_msg_events : Vec :: new ( ) ,
7359+ is_connected : false ,
73497360 } ;
73507361 per_peer_state. insert ( peer_pubkey, Mutex :: new ( peer_state) ) ;
73517362 }
@@ -8059,8 +8070,6 @@ mod tests {
80598070
80608071 let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
80618072 let payee_pubkey = nodes[ 1 ] . node . get_our_node_id ( ) ;
8062- nodes[ 0 ] . node . peer_connected ( & payee_pubkey, & msgs:: Init { features : nodes[ 1 ] . node . init_features ( ) , remote_network_address : None } , true ) . unwrap ( ) ;
8063- nodes[ 1 ] . node . peer_connected ( & payer_pubkey, & msgs:: Init { features : nodes[ 0 ] . node . init_features ( ) , remote_network_address : None } , false ) . unwrap ( ) ;
80648073
80658074 let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
80668075 let route_params = RouteParameters {
@@ -8104,8 +8113,6 @@ mod tests {
81048113
81058114 let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
81068115 let payee_pubkey = nodes[ 1 ] . node . get_our_node_id ( ) ;
8107- nodes[ 0 ] . node . peer_connected ( & payee_pubkey, & msgs:: Init { features : nodes[ 1 ] . node . init_features ( ) , remote_network_address : None } , true ) . unwrap ( ) ;
8108- nodes[ 1 ] . node . peer_connected ( & payer_pubkey, & msgs:: Init { features : nodes[ 0 ] . node . init_features ( ) , remote_network_address : None } , false ) . unwrap ( ) ;
81098116
81108117 let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
81118118 let route_params = RouteParameters {
0 commit comments