@@ -474,7 +474,7 @@ impl PeerState {
474474 self . outbound_channels_by_intercept_scid . insert ( intercept_scid, channel) ;
475475 }
476476
477- fn peer_disconnected ( & mut self ) {
477+ fn prune_expired_request_state ( & mut self ) {
478478 self . pending_requests . retain ( |_, entry| {
479479 match entry {
480480 LSPS2Request :: GetInfo ( _) => false ,
@@ -495,6 +495,11 @@ impl PeerState {
495495 true
496496 } ) ;
497497 }
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+ }
498503}
499504
500505/// The main object allowing to send and receive LSPS2 messages.
@@ -1270,12 +1275,29 @@ where
12701275 }
12711276
12721277 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) ;
12771289 }
12781290 }
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+ }
12791301}
12801302
12811303impl < CM : Deref + Clone > ProtocolMessageHandler for LSPS2ServiceHandler < CM >
0 commit comments