@@ -474,7 +474,7 @@ impl PeerState {
474
474
self . outbound_channels_by_intercept_scid . insert ( intercept_scid, channel) ;
475
475
}
476
476
477
- fn peer_disconnected ( & mut self ) {
477
+ fn prune_expired_request_state ( & mut self ) {
478
478
self . pending_requests . retain ( |_, entry| {
479
479
match entry {
480
480
LSPS2Request :: GetInfo ( _) => false ,
@@ -495,6 +495,11 @@ impl PeerState {
495
495
true
496
496
} ) ;
497
497
}
498
+
499
+ fn is_prunable ( & self ) -> bool {
500
+ // Return whether the entire state is empty.
501
+ self . pending_requests . is_empty ( ) && self . outbound_channels_by_intercept_scid . is_empty ( )
502
+ }
498
503
}
499
504
500
505
/// The main object allowing to send and receive LSPS2 messages.
@@ -1270,12 +1275,29 @@ where
1270
1275
}
1271
1276
1272
1277
pub ( crate ) fn peer_disconnected ( & self , counterparty_node_id : PublicKey ) {
1273
- let outer_state_lock = self . per_peer_state . write ( ) . unwrap ( ) ;
1274
- if let Some ( inner_state_lock) = outer_state_lock. get ( & counterparty_node_id) {
1275
- let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
1276
- peer_state_lock. peer_disconnected ( ) ;
1278
+ let mut outer_state_lock = self . per_peer_state . write ( ) . unwrap ( ) ;
1279
+ let is_prunable =
1280
+ if let Some ( inner_state_lock) = outer_state_lock. get ( & counterparty_node_id) {
1281
+ let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
1282
+ peer_state_lock. prune_expired_request_state ( ) ;
1283
+ peer_state_lock. is_prunable ( )
1284
+ } else {
1285
+ return ;
1286
+ } ;
1287
+ if is_prunable {
1288
+ outer_state_lock. remove ( & counterparty_node_id) ;
1277
1289
}
1278
1290
}
1291
+
1292
+ #[ allow( clippy:: bool_comparison) ]
1293
+ pub ( crate ) fn prune_peer_state ( & self ) {
1294
+ let mut outer_state_lock = self . per_peer_state . write ( ) . unwrap ( ) ;
1295
+ outer_state_lock. retain ( |_, inner_state_lock| {
1296
+ let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
1297
+ peer_state_lock. prune_expired_request_state ( ) ;
1298
+ peer_state_lock. is_prunable ( ) == false
1299
+ } ) ;
1300
+ }
1279
1301
}
1280
1302
1281
1303
impl < CM : Deref + Clone > ProtocolMessageHandler for LSPS2ServiceHandler < CM >
0 commit comments