@@ -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
@@ -6294,6 +6298,8 @@ where
6294
6298
& events:: MessageSendEvent :: SendGossipTimestampFilter { .. } => false ,
6295
6299
}
6296
6300
} ) ;
6301
+ debug_assert ! ( peer_state. is_connected, "A disconnected peer cannot disconnect" ) ;
6302
+ peer_state. is_connected = false ;
6297
6303
}
6298
6304
}
6299
6305
if no_channels_remain {
@@ -6324,10 +6330,14 @@ where
6324
6330
channel_by_id : HashMap :: new ( ) ,
6325
6331
latest_features : init_msg. features . clone ( ) ,
6326
6332
pending_msg_events : Vec :: new ( ) ,
6333
+ is_connected : true ,
6327
6334
} ) ) ;
6328
6335
} ,
6329
6336
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 ;
6331
6341
} ,
6332
6342
}
6333
6343
}
@@ -7346,6 +7356,7 @@ where
7346
7356
channel_by_id : peer_channels. remove ( & peer_pubkey) . unwrap_or ( HashMap :: new ( ) ) ,
7347
7357
latest_features : Readable :: read ( reader) ?,
7348
7358
pending_msg_events : Vec :: new ( ) ,
7359
+ is_connected : false ,
7349
7360
} ;
7350
7361
per_peer_state. insert ( peer_pubkey, Mutex :: new ( peer_state) ) ;
7351
7362
}
@@ -8059,8 +8070,6 @@ mod tests {
8059
8070
8060
8071
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
8061
8072
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 ( ) ;
8064
8073
8065
8074
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
8066
8075
let route_params = RouteParameters {
@@ -8104,8 +8113,6 @@ mod tests {
8104
8113
8105
8114
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
8106
8115
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 ( ) ;
8109
8116
8110
8117
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
8111
8118
let route_params = RouteParameters {
0 commit comments