Skip to content

Commit 4bbd65d

Browse files
committed
Drop scorer lock after find_route
If we do not do that, the lock will not be released for `retry_payment`.
1 parent 8538955 commit 4bbd65d

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

lightning-invoice/src/payment.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -532,12 +532,15 @@ where
532532
HashMap::new()
533533
}
534534
};
535-
let scorer = AccountForInFlightHtlcs { scorer: &mut self.scorer.lock(), inflight_htlcs };
536535

537-
let route = self.router.find_route(
538-
&payer, params, &payment_hash, Some(&first_hops.iter().collect::<Vec<_>>()),
539-
&scorer
540-
).map_err(|e| PaymentError::Routing(e))?;
536+
let route = {
537+
let scorer = AccountForInFlightHtlcs { scorer: &mut self.scorer.lock(), inflight_htlcs };
538+
539+
self.router.find_route(
540+
&payer, &params, &payment_hash, Some(&first_hops.iter().collect::<Vec<_>>()),
541+
&scorer
542+
).map_err(|e| PaymentError::Routing(e))?
543+
};
541544

542545
match send_payment(&route) {
543546
Ok(payment_id) => {
@@ -691,18 +694,23 @@ where
691694
HashMap::new()
692695
}
693696
};
694-
let scorer = AccountForInFlightHtlcs { scorer: &mut self.scorer.lock(), inflight_htlcs };
695697

696-
let route = self.router.find_route(
697-
&payer, &params, &payment_hash, Some(&first_hops.iter().collect::<Vec<_>>()),
698-
&scorer
699-
);
698+
let route = {
699+
let scorer = AccountForInFlightHtlcs { scorer: &mut self.scorer.lock(), inflight_htlcs };
700+
701+
self.router.find_route(
702+
&payer, &params, &payment_hash, Some(&first_hops.iter().collect::<Vec<_>>()),
703+
&scorer
704+
)
705+
};
706+
700707

701708
if route.is_err() {
702709
log_trace!(self.logger, "Failed to find a route for payment {}; not retrying ({:})", log_bytes!(payment_hash.0), attempts);
703710
return Err(());
704711
}
705712

713+
706714
match self.payer.retry_payment(&route.unwrap(), payment_id) {
707715
Ok(()) => Ok(()),
708716
Err(PaymentSendFailure::ParameterError(_)) |

0 commit comments

Comments
 (0)