@@ -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
@@ -6298,6 +6302,8 @@ where
6298
6302
& events:: MessageSendEvent :: SendGossipTimestampFilter { .. } => false ,
6299
6303
}
6300
6304
} ) ;
6305
+ debug_assert ! ( peer_state. is_connected, "A disconnected peer cannot disconnect" ) ;
6306
+ peer_state. is_connected = false ;
6301
6307
}
6302
6308
}
6303
6309
if no_channels_remain {
@@ -6328,10 +6334,14 @@ where
6328
6334
channel_by_id : HashMap :: new ( ) ,
6329
6335
latest_features : init_msg. features . clone ( ) ,
6330
6336
pending_msg_events : Vec :: new ( ) ,
6337
+ is_connected : true ,
6331
6338
} ) ) ;
6332
6339
} ,
6333
6340
hash_map:: Entry :: Occupied ( e) => {
6334
- e. get ( ) . lock ( ) . unwrap ( ) . latest_features = init_msg. features . clone ( ) ;
6341
+ let mut peer_state = e. get ( ) . lock ( ) . unwrap ( ) ;
6342
+ peer_state. latest_features = init_msg. features . clone ( ) ;
6343
+ debug_assert ! ( !peer_state. is_connected, "A peer shouldn't be connected twice" ) ;
6344
+ peer_state. is_connected = true ;
6335
6345
} ,
6336
6346
}
6337
6347
}
@@ -7350,6 +7360,7 @@ where
7350
7360
channel_by_id : peer_channels. remove ( & peer_pubkey) . unwrap_or ( HashMap :: new ( ) ) ,
7351
7361
latest_features : Readable :: read ( reader) ?,
7352
7362
pending_msg_events : Vec :: new ( ) ,
7363
+ is_connected : false ,
7353
7364
} ;
7354
7365
per_peer_state. insert ( peer_pubkey, Mutex :: new ( peer_state) ) ;
7355
7366
}
@@ -8063,8 +8074,6 @@ mod tests {
8063
8074
8064
8075
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
8065
8076
let payee_pubkey = nodes[ 1 ] . node . get_our_node_id ( ) ;
8066
- nodes[ 0 ] . node . peer_connected ( & payee_pubkey, & msgs:: Init { features : nodes[ 1 ] . node . init_features ( ) , remote_network_address : None } , true ) . unwrap ( ) ;
8067
- nodes[ 1 ] . node . peer_connected ( & payer_pubkey, & msgs:: Init { features : nodes[ 0 ] . node . init_features ( ) , remote_network_address : None } , false ) . unwrap ( ) ;
8068
8077
8069
8078
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
8070
8079
let route_params = RouteParameters {
@@ -8108,8 +8117,6 @@ mod tests {
8108
8117
8109
8118
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
8110
8119
let payee_pubkey = nodes[ 1 ] . node . get_our_node_id ( ) ;
8111
- nodes[ 0 ] . node . peer_connected ( & payee_pubkey, & msgs:: Init { features : nodes[ 1 ] . node . init_features ( ) , remote_network_address : None } , true ) . unwrap ( ) ;
8112
- nodes[ 1 ] . node . peer_connected ( & payer_pubkey, & msgs:: Init { features : nodes[ 0 ] . node . init_features ( ) , remote_network_address : None } , false ) . unwrap ( ) ;
8113
8120
8114
8121
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
8115
8122
let route_params = RouteParameters {
0 commit comments