onchain: Load HTLC stubs upon starting onchaind

This wires in the loading of `struct htlc_stub`s on-demand when
starting `onchaind` so that we don't need to keep them in memory.

Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
Christian Decker 2017-10-10 14:05:36 +02:00 committed by Rusty Russell
parent 49ed7c9ab0
commit a668cb4f2b

View file

@ -1400,6 +1400,7 @@ static enum watch_result funding_spent(struct peer *peer,
struct sha256_double our_last_txid; struct sha256_double our_last_txid;
s64 keyindex; s64 keyindex;
struct pubkey ourkey; struct pubkey ourkey;
struct htlc_stub *stubs;
peer_fail_permanent_str(peer, "Funding transaction spent"); peer_fail_permanent_str(peer, "Funding transaction spent");
@ -1419,6 +1420,12 @@ static enum watch_result funding_spent(struct peer *peer,
return KEEP_WATCHING; return KEEP_WATCHING;
} }
stubs = wallet_htlc_stubs(peer, peer->ld->wallet, peer->channel);
if (!stubs) {
log_broken(peer->log, "Could not load htlc_stubs");
return KEEP_WATCHING;
}
/* We re-use this key to send other outputs to. */ /* We re-use this key to send other outputs to. */
if (peer->local_shutdown_idx >= 0) if (peer->local_shutdown_idx >= 0)
keyindex = peer->local_shutdown_idx; keyindex = peer->local_shutdown_idx;
@ -1469,14 +1476,14 @@ static enum watch_result funding_spent(struct peer *peer,
/* FIXME: config for 'reasonable depth' */ /* FIXME: config for 'reasonable depth' */
3, 3,
peer->last_htlc_sigs, peer->last_htlc_sigs,
tal_count(peer->htlcs)); tal_count(stubs));
subd_send_msg(peer->owner, take(msg)); subd_send_msg(peer->owner, take(msg));
/* FIXME: Don't queue all at once, use an empty cb... */ /* FIXME: Don't queue all at once, use an empty cb... */
for (size_t i = 0; i < tal_count(peer->htlcs); i++) { for (size_t i = 0; i < tal_count(stubs); i++) {
bool tell_immediate; bool tell_immediate;
bool tell = tell_if_missing(peer, i, &tell_immediate); bool tell = tell_if_missing(peer, i, &tell_immediate);
msg = towire_onchain_htlc(peer, peer->htlcs+i, msg = towire_onchain_htlc(peer, &stubs[i],
tell, tell_immediate); tell, tell_immediate);
subd_send_msg(peer->owner, take(msg)); subd_send_msg(peer->owner, take(msg));
} }