plugins/pay: fix leak on failed new payments.

Start with attaching the payment to cmd (in case of failure), then steal
onto the plugin itself.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2020-10-20 14:31:30 +10:30
parent 639eddf840
commit 92f2461b5d
2 changed files with 7 additions and 3 deletions

View File

@@ -113,7 +113,6 @@ static struct command_result *json_keysend(struct command *cmd, const char *buf,
#if DEVELOPER
bool *use_shadow;
#endif
p = payment_new(NULL, cmd, NULL /* No parent */, pay_mods);
if (!param(cmd, buf, params,
p_req("destination", param_node_id, &destination),
p_req("msatoshi", param_msat, &msat),
@@ -130,6 +129,7 @@ static struct command_result *json_keysend(struct command *cmd, const char *buf,
NULL))
return command_param_failed();
p = payment_new(cmd, cmd, NULL /* No parent */, pay_mods);
p->local_id = &my_id;
p->json_buffer = tal_steal(p, buf);
p->json_toks = params;
@@ -159,6 +159,8 @@ static struct command_result *json_keysend(struct command *cmd, const char *buf,
#endif
p->label = tal_steal(p, label);
payment_start(p);
/* We're keeping this around now */
tal_steal(cmd->plugin, p);
return command_still_pending(cmd);
}