@@ -483,6 +483,10 @@ pub(super) struct PeerState<Signer: ChannelSigner> {
483
483
/// Messages to send to the peer - pushed to in the same lock that they are generated in (except
484
484
/// for broadcast messages, where ordering isn't as strict).
485
485
pub ( super ) pending_msg_events : Vec < MessageSendEvent > ,
486
+ /// The peer is currently connected (i.e. we've seen a
487
+ /// [`ChannelMessageHandler::peer_connected`] and no corresponding
488
+ /// [`ChannelMessageHandler::peer_disconnected`].
489
+ is_connected : bool ,
486
490
}
487
491
488
492
/// Stores a PaymentSecret and any other data we may need to validate an inbound payment is
@@ -6195,6 +6199,8 @@ where
6195
6199
& events:: MessageSendEvent :: SendGossipTimestampFilter { .. } => false ,
6196
6200
}
6197
6201
} ) ;
6202
+ debug_assert ! ( peer_state. is_connected, "A disconnected peer cannot disconnect" ) ;
6203
+ peer_state. is_connected = false ;
6198
6204
}
6199
6205
}
6200
6206
if no_channels_remain {
@@ -6225,10 +6231,14 @@ where
6225
6231
channel_by_id : HashMap :: new ( ) ,
6226
6232
latest_features : init_msg. features . clone ( ) ,
6227
6233
pending_msg_events : Vec :: new ( ) ,
6234
+ is_connected : true ,
6228
6235
} ) ) ;
6229
6236
} ,
6230
6237
hash_map:: Entry :: Occupied ( e) => {
6231
- e. get ( ) . lock ( ) . unwrap ( ) . latest_features = init_msg. features . clone ( ) ;
6238
+ let mut peer_state = e. get ( ) . lock ( ) . unwrap ( ) ;
6239
+ peer_state. latest_features = init_msg. features . clone ( ) ;
6240
+ debug_assert ! ( !peer_state. is_connected, "A peer shouldn't be connected twice" ) ;
6241
+ peer_state. is_connected = true ;
6232
6242
} ,
6233
6243
}
6234
6244
}
@@ -7247,6 +7257,7 @@ where
7247
7257
channel_by_id : peer_channels. remove ( & peer_pubkey) . unwrap_or ( HashMap :: new ( ) ) ,
7248
7258
latest_features : Readable :: read ( reader) ?,
7249
7259
pending_msg_events : Vec :: new ( ) ,
7260
+ is_connected : false ,
7250
7261
} ;
7251
7262
per_peer_state. insert ( peer_pubkey, Mutex :: new ( peer_state) ) ;
7252
7263
}
@@ -7959,8 +7970,6 @@ mod tests {
7959
7970
7960
7971
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
7961
7972
let payee_pubkey = nodes[ 1 ] . node . get_our_node_id ( ) ;
7962
- nodes[ 0 ] . node . peer_connected ( & payee_pubkey, & msgs:: Init { features : nodes[ 1 ] . node . init_features ( ) , remote_network_address : None } , true ) . unwrap ( ) ;
7963
- nodes[ 1 ] . node . peer_connected ( & payer_pubkey, & msgs:: Init { features : nodes[ 0 ] . node . init_features ( ) , remote_network_address : None } , false ) . unwrap ( ) ;
7964
7973
7965
7974
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
7966
7975
let route_params = RouteParameters {
@@ -8004,8 +8013,6 @@ mod tests {
8004
8013
8005
8014
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
8006
8015
let payee_pubkey = nodes[ 1 ] . node . get_our_node_id ( ) ;
8007
- nodes[ 0 ] . node . peer_connected ( & payee_pubkey, & msgs:: Init { features : nodes[ 1 ] . node . init_features ( ) , remote_network_address : None } , true ) . unwrap ( ) ;
8008
- nodes[ 1 ] . node . peer_connected ( & payer_pubkey, & msgs:: Init { features : nodes[ 0 ] . node . init_features ( ) , remote_network_address : None } , false ) . unwrap ( ) ;
8009
8016
8010
8017
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
8011
8018
let route_params = RouteParameters {
0 commit comments