diff --git a/daemon/pay.c b/daemon/pay.c index 25f936354..c77363d01 100644 --- a/daemon/pay.c +++ b/daemon/pay.c @@ -241,7 +241,8 @@ static void json_getroute(struct command *cmd, return; } - peer = find_route(cmd->dstate, &id, msatoshi, riskfactor, &fee, &route); + peer = find_route(cmd, cmd->dstate, &id, msatoshi, riskfactor, + &fee, &route); if (!peer) { command_fail(cmd, "no route found"); return; diff --git a/daemon/routing.c b/daemon/routing.c index be011d1f1..3f8e1c718 100644 --- a/daemon/routing.c +++ b/daemon/routing.c @@ -273,7 +273,8 @@ static void bfg_one_edge(struct node *node, size_t edgenum, double riskfactor) } } -struct peer *find_route(struct lightningd_state *dstate, +struct peer *find_route(const tal_t *ctx, + struct lightningd_state *dstate, const struct pubkey *to, u64 msatoshi, double riskfactor, @@ -350,15 +351,6 @@ struct peer *find_route(struct lightningd_state *dstate, dst = dst->bfg[best].prev->dst; best--; - *fee = dst->bfg[best].total - msatoshi; - *route = tal_arr(dstate, struct node_connection *, best); - for (i = 0, n = dst; - i < best; - n = n->bfg[best-i].prev->dst, i++) { - (*route)[i] = n->bfg[best-i].prev; - } - assert(n == src); - /* We should only add routes if we have a peer. */ first = find_peer(dstate, &dst->id); if (!first) { @@ -367,6 +359,15 @@ struct peer *find_route(struct lightningd_state *dstate, return NULL; } + *fee = dst->bfg[best].total - msatoshi; + *route = tal_arr(ctx, struct node_connection *, best); + for (i = 0, n = dst; + i < best; + n = n->bfg[best-i].prev->dst, i++) { + (*route)[i] = n->bfg[best-i].prev; + } + assert(n == src); + msatoshi += *fee; log_info(dstate->base_log, "find_route:"); log_add_struct(dstate->base_log, "via %s", struct pubkey, first->id); diff --git a/daemon/routing.h b/daemon/routing.h index 5430c47ba..df588be7b 100644 --- a/daemon/routing.h +++ b/daemon/routing.h @@ -67,7 +67,8 @@ struct node_connection *add_connection(struct lightningd_state *dstate, void remove_connection(struct lightningd_state *dstate, const struct pubkey *src, const struct pubkey *dst); -struct peer *find_route(struct lightningd_state *dstate, +struct peer *find_route(const tal_t *ctx, + struct lightningd_state *dstate, const struct pubkey *to, u64 msatoshi, double riskfactor,