@@ -483,6 +483,7 @@ 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
+ is_connected : bool ,
486
487
}
487
488
488
489
/// Stores a PaymentSecret and any other data we may need to validate an inbound payment is
@@ -6195,6 +6196,8 @@ where
6195
6196
& events:: MessageSendEvent :: SendGossipTimestampFilter { .. } => false ,
6196
6197
}
6197
6198
} ) ;
6199
+ debug_assert ! ( peer_state. is_connected, "A disconnected peer cannot disconnect" ) ;
6200
+ peer_state. is_connected = false ;
6198
6201
}
6199
6202
}
6200
6203
if no_channels_remain {
@@ -6225,10 +6228,14 @@ where
6225
6228
channel_by_id : HashMap :: new ( ) ,
6226
6229
latest_features : init_msg. features . clone ( ) ,
6227
6230
pending_msg_events : Vec :: new ( ) ,
6231
+ is_connected : true ,
6228
6232
} ) ) ;
6229
6233
} ,
6230
6234
hash_map:: Entry :: Occupied ( e) => {
6231
- e. get ( ) . lock ( ) . unwrap ( ) . latest_features = init_msg. features . clone ( ) ;
6235
+ let mut peer_state = e. get ( ) . lock ( ) . unwrap ( ) ;
6236
+ peer_state. latest_features = init_msg. features . clone ( ) ;
6237
+ debug_assert ! ( !peer_state. is_connected, "A peer shouldn't be connected twice" ) ;
6238
+ peer_state. is_connected = true ;
6232
6239
} ,
6233
6240
}
6234
6241
}
@@ -7247,6 +7254,7 @@ where
7247
7254
channel_by_id : peer_channels. remove ( & peer_pubkey) . unwrap_or ( HashMap :: new ( ) ) ,
7248
7255
latest_features : Readable :: read ( reader) ?,
7249
7256
pending_msg_events : Vec :: new ( ) ,
7257
+ is_connected : false ,
7250
7258
} ;
7251
7259
per_peer_state. insert ( peer_pubkey, Mutex :: new ( peer_state) ) ;
7252
7260
}
@@ -7959,8 +7967,6 @@ mod tests {
7959
7967
7960
7968
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
7961
7969
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
7970
7965
7971
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
7966
7972
let route_params = RouteParameters {
@@ -8004,8 +8010,6 @@ mod tests {
8004
8010
8005
8011
let payer_pubkey = nodes[ 0 ] . node . get_our_node_id ( ) ;
8006
8012
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
8013
8010
8014
let _chan = create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] ) ;
8011
8015
let route_params = RouteParameters {
0 commit comments