plugins/pay: ensure htables are always tal objects.

We want to change the htable allocator to use tal, which will need
this.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2023-01-12 11:43:13 +10:30
parent 94e8ce030a
commit 3c4ce9e448

View file

@ -425,11 +425,12 @@ static struct command_result *listsendpays_done(struct command *cmd,
size_t i; size_t i;
const jsmntok_t *t, *arr; const jsmntok_t *t, *arr;
struct json_stream *ret; struct json_stream *ret;
struct pay_map pay_map; struct pay_map *pay_map;
struct pay_mpp *pm; struct pay_mpp *pm;
struct pay_sort_key *order = tal_arr(tmpctx, struct pay_sort_key, 0); struct pay_sort_key *order = tal_arr(tmpctx, struct pay_sort_key, 0);
pay_map_init(&pay_map); pay_map = tal(cmd, struct pay_map);
pay_map_init(pay_map);
arr = json_get_member(buf, result, "payments"); arr = json_get_member(buf, result, "payments");
if (!arr || arr->type != JSMN_ARRAY) if (!arr || arr->type != JSMN_ARRAY)
@ -474,7 +475,7 @@ static struct command_result *listsendpays_done(struct command *cmd,
key.payment_hash = &payment_hash; key.payment_hash = &payment_hash;
key.groupid = groupid; key.groupid = groupid;
pm = pay_map_get(&pay_map, &key); pm = pay_map_get(pay_map, &key);
if (!pm) { if (!pm) {
pm = tal(cmd, struct pay_mpp); pm = tal(cmd, struct pay_mpp);
pm->state = 0; pm->state = 0;
@ -491,7 +492,7 @@ static struct command_result *listsendpays_done(struct command *cmd,
pm->sortkey.payment_hash = pm->payment_hash; pm->sortkey.payment_hash = pm->payment_hash;
pm->sortkey.groupid = groupid; pm->sortkey.groupid = groupid;
pm->success_at = UINT64_MAX; pm->success_at = UINT64_MAX;
pay_map_add(&pay_map, pm); pay_map_add(pay_map, pm);
// First time we see the groupid we add it to the order // First time we see the groupid we add it to the order
// array, so we can retrieve them in the correct order. // array, so we can retrieve them in the correct order.
tal_arr_expand(&order, pm->sortkey); tal_arr_expand(&order, pm->sortkey);
@ -528,11 +529,11 @@ static struct command_result *listsendpays_done(struct command *cmd,
ret = jsonrpc_stream_success(cmd); ret = jsonrpc_stream_success(cmd);
json_array_start(ret, "pays"); json_array_start(ret, "pays");
for (i = 0; i < tal_count(order); i++) { for (i = 0; i < tal_count(order); i++) {
pm = pay_map_get(&pay_map, &order[i]); pm = pay_map_get(pay_map, &order[i]);
assert(pm != NULL); assert(pm != NULL);
add_new_entry(ret, buf, pm); add_new_entry(ret, buf, pm);
} }
pay_map_clear(&pay_map); pay_map_clear(pay_map);
json_array_end(ret); json_array_end(ret);
return command_finished(cmd, ret); return command_finished(cmd, ret);
} }