@@ -487,6 +487,10 @@ pub(super) struct PeerState<Signer: ChannelSigner> {
487
487
/// Messages to send to the peer - pushed to in the same lock that they are generated in (except
488
488
/// for broadcast messages, where ordering isn't as strict).
489
489
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 ,
490
494
}
491
495
492
496
/// Stores a PaymentSecret and any other data we may need to validate an inbound payment is
@@ -6289,6 +6293,8 @@ where
6289
6293
& events:: MessageSendEvent :: SendGossipTimestampFilter { .. } => false ,
6290
6294
}
6291
6295
} ) ;
6296
+ debug_assert ! ( peer_state. is_connected, "A disconnected peer cannot disconnect" ) ;
6297
+ peer_state. is_connected = false ;
6292
6298
}
6293
6299
}
6294
6300
if no_channels_remain {
@@ -6319,10 +6325,14 @@ where
6319
6325
channel_by_id : HashMap :: new ( ) ,
6320
6326
latest_features : init_msg. features . clone ( ) ,
6321
6327
pending_msg_events : Vec :: new ( ) ,
6328
+ is_connected : true ,
6322
6329
} ) ) ;
6323
6330
} ,
6324
6331
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 ;
6326
6336
} ,
6327
6337
}
6328
6338
}
@@ -7341,6 +7351,7 @@ where
7341
7351
channel_by_id : peer_channels. remove ( & peer_pubkey) . unwrap_or ( HashMap :: new ( ) ) ,
7342
7352
latest_features : Readable :: read ( reader) ?,
7343
7353
pending_msg_events : Vec :: new ( ) ,
7354
+ is_connected : false ,
7344
7355
} ;
7345
7356
per_peer_state. insert ( peer_pubkey, Mutex :: new ( peer_state) ) ;
7346
7357
}
@@ -8054,8 +8065,6 @@ mod tests {
8054
8065
8055
8066
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
8056
8067
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 ( ) ;
8059
8068
8060
8069
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
8061
8070
let route_params = RouteParameters {
@@ -8099,8 +8108,6 @@ mod tests {
8099
8108
8100
8109
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
8101
8110
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 ( ) ;
8104
8111
8105
8112
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
8106
8113
let route_params = RouteParameters {
0 commit comments