@@ -39,7 +39,7 @@ use crate::{Config, Error};
3939use self :: router:: LSPS2LeaseParameters ;
4040use self :: state:: {
4141 now_secs, LSPS2LeaseState , LeaseCacheTarget , LeaseCacheTargetId , LeaseCacheTargetStore ,
42- PaymentLease , PaymentLeaseId , PaymentLeaseStore ,
42+ LeaseRequestKey , PaymentLease , PaymentLeaseId , PaymentLeaseStore , PendingLeaseRequestState ,
4343} ;
4444
4545async fn consume_after_persisted_removal < T , E , RF , CF , Fut > (
@@ -102,6 +102,7 @@ where
102102 pub ( crate ) lease_store : Arc < PaymentLeaseStore < L > > ,
103103 pub ( crate ) lease_state : Mutex < LSPS2LeaseState > ,
104104 pub ( crate ) cache_target_store : Arc < LeaseCacheTargetStore < L > > ,
105+ pub ( crate ) pending_lease_request_state : Mutex < PendingLeaseRequestState > ,
105106 pub ( crate ) channel_manager : Arc < ChannelManager > ,
106107 pub ( crate ) keys_manager : Arc < KeysManager > ,
107108 pub ( crate ) discovery_done_rx : tokio:: sync:: watch:: Receiver < bool > ,
@@ -275,6 +276,17 @@ where
275276 {
276277 return Ok ( ( lease, total_fee_msat, lsp, false ) ) ;
277278 }
279+ let request_lock = self
280+ . pending_lease_request_state
281+ . lock ( )
282+ . expect ( "lock" )
283+ . request_lock ( LeaseRequestKey :: Fixed ( amount_msat) ) ;
284+ let _request_guard = request_lock. lock ( ) . await ;
285+ if let Some ( ( lease, total_fee_msat, lsp) ) =
286+ self . take_cached_fixed_lease ( amount_msat) . await ?
287+ {
288+ return Ok ( ( lease, total_fee_msat, lsp, false ) ) ;
289+ }
278290
279291 let all_offers = self . gather_lsps2_offers ( connection_manager) . await ?;
280292 let ( cheapest_lsp, min_total_fee_msat, min_opening_params) = all_offers
@@ -341,6 +353,15 @@ where
341353 if let Some ( ( lease, proportional_fee, lsp) ) = self . take_cached_variable_lease ( ) . await ? {
342354 return Ok ( ( lease, proportional_fee, lsp, false ) ) ;
343355 }
356+ let request_lock = self
357+ . pending_lease_request_state
358+ . lock ( )
359+ . expect ( "lock" )
360+ . request_lock ( LeaseRequestKey :: Variable ) ;
361+ let _request_guard = request_lock. lock ( ) . await ;
362+ if let Some ( ( lease, proportional_fee, lsp) ) = self . take_cached_variable_lease ( ) . await ? {
363+ return Ok ( ( lease, proportional_fee, lsp, false ) ) ;
364+ }
344365
345366 let all_offers = self . gather_lsps2_offers ( connection_manager) . await ?;
346367 let mut rejected_for_fee = false ;
0 commit comments