@ -470,6 +470,7 @@ static struct channel_hint *payment_chanhints_get(struct payment *p,
* prior application ( ` remove = true ` ) . */
* prior application ( ` remove = true ` ) . */
static bool payment_chanhints_apply_route ( struct payment * p , bool remove )
static bool payment_chanhints_apply_route ( struct payment * p , bool remove )
{
{
bool apply ;
struct route_hop * curhop ;
struct route_hop * curhop ;
struct channel_hint * curhint ;
struct channel_hint * curhint ;
struct payment * root = payment_root ( p ) ;
struct payment * root = payment_root ( p ) ;
@ -489,12 +490,17 @@ static bool payment_chanhints_apply_route(struct payment *p, bool remove)
if ( ! curhint )
if ( ! curhint )
continue ;
continue ;
/* A failure can happen if we add an HTLC, and either
/* For local channels we check that we don't overwhelm
* the local htlc_budget is exhausted , or the capacity
* them with too many HTLCs . */
* is exceeded . */
apply = ( ! curhint - > local ) | | curhint - > htlc_budget > 0 ;
if ( ( curhint - > local & & curhint - > htlc_budget < = 0 ) | |
amount_msat_greater ( curhop - > amount ,
/* For all channels we check that they have a
curhint - > estimated_capacity ) ) {
* sufficiently large estimated capacity to have some
* chance of succeeding . */
apply & = amount_msat_greater ( curhint - > estimated_capacity ,
curhop - > amount ) ;
if ( ! apply ) {
/* This can happen in case of multiple
/* This can happen in case of multiple
* concurrent getroute calls using the
* concurrent getroute calls using the
* same channel_hints , no biggy , it ' s
* same channel_hints , no biggy , it ' s