@@ -1485,16 +1485,22 @@ where L::Target: Logger {
14851485 // also makes routing more reliable.
14861486 let mut overpaid_value_msat = aggregate_route_value_msat - final_value_msat;
14871487
1488- // First, we drop some expensive low-value paths entirely if possible.
1489- // In order to do so, we pre-sort by total fees paid, so that in case of equal
1490- // values we prefer lower cost paths.
1491- // (Descending order, so we drop higher-fee paths first)
1492- cur_route. sort_by_key ( |path| path. get_total_fee_paid_msat ( ) ) ;
1493- cur_route. reverse ( ) ;
1494-
1495- // Then sort by value so that we drop many really-low values first, since
1496- // fewer paths is better: the payment is less likely to fail.
1497- cur_route. sort_by_key ( |path| path. get_value_msat ( ) ) ;
1488+ // First, we drop some expensive low-value paths entirely if possible, since fewer
1489+ // paths is better: the payment is less likely to fail. In order to do so, we sort
1490+ // by value and fall back to total fees paid, i.e., in case of equal values values
1491+ // we prefer lower cost paths.
1492+ cur_route. sort_unstable_by ( |a, b| {
1493+ let a_value = a. get_value_msat ( ) ;
1494+ let b_value = b. get_value_msat ( ) ;
1495+ if a_value. cmp ( & b_value) . is_eq ( ) {
1496+ let a_fees = a. get_total_fee_paid_msat ( ) ;
1497+ let b_fees = b. get_total_fee_paid_msat ( ) ;
1498+ // Reverse ordering here, so we drop higher-fee paths first
1499+ b_fees. cmp ( & a_fees)
1500+ } else {
1501+ a_value. cmp ( & b_value)
1502+ }
1503+ } ) ;
14981504
14991505 // We should make sure that at least 1 path left.
15001506 let mut paths_left = cur_route. len ( ) ;
0 commit comments