From d18817a525b2a046189277d8bcd2d80551bad850 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 5 Apr 2022 11:36:58 +0930 Subject: [PATCH] wallet: don't get so upset on orphaned HTLC. User grubman on IRC reported a crash due to new HTLC checks: ``` 2022-04-05T01:15:17.707Z **BROKEN** wallet: Missing preimage for orphaned HTLC; replacing with zeros ... 2022-04-05T01:15:44.950Z **BROKEN** lightningd: check_already_failed:Both failed and succeeded? 2022-04-05T01:15:45.020Z **BROKEN** lightningd: FATAL SIGNAL 6 (version v0.11.0rc1-modded) 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: common/daemon.c:38 (send_backtrace) 0xaaaab8f7f8bb 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: common/daemon.c:46 (crashdump) 0xaaaab8f7f91b 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: (null):0 ((null)) 0xffffa4a315bf 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: (null):0 ((null)) 0xffffa45c6cd8 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: (null):0 ((null)) 0xffffa45b3a27 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/log.c:821 (fatal_vfmt) 0xaaaab8f3e1b7 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/log.c:829 (fatal) 0xaaaab8f3e24b 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/htlc_end.c:87 (corrupt) 0xaaaab8f325d3 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/htlc_end.c:175 (htlc_out_check) 0xaaaab8f32ee3 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/peer_htlcs.c:1471 (check_already_failed) 0xaaaab8f53ea7 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/peer_htlcs.c:1575 (onchain_failed_our_htlc) 0xaaaab8f54aab 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/onchain_control.c:411 (handle_missing_htlc_output) 0xaaaab8f4037b 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/onchain_control.c:544 (onchain_msg) 0xaaaab8f409bf 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/subd.c:556 (sd_msg_read) 0xaaaab8f5f8ef 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: ccan/ccan/io/io.c:59 (next_plan) 0xaaaab8fda197 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: ccan/ccan/io/io.c:407 (do_plan) 0xaaaab8fda76f 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: ccan/ccan/io/io.c:417 (io_ready) 0xaaaab8fda82f 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: ccan/ccan/io/poll.c:453 (io_loop) 0xaaaab8fdc77f 2022-04-05T01:15:45.020Z **BROKEN** lightningd: backtrace: lightningd/io_loop_with_timers.c:22 (io_loop_with_timers) 0xaaaab8f37857 2022-04-05T01:15:45.021Z **BROKEN** lightningd: backtrace: lightningd/lightningd.c:1181 (main) 0xaaaab8f3bcff 2022-04-05T01:15:45.021Z **BROKEN** lightningd: backtrace: (null):0 ((null)) 0xffffa45b3d4f 2022-04-05T01:15:45.021Z **BROKEN** lightningd: backtrace: (null):0 ((null)) 0xaaaab8f1ed33 ``` Since no HTLCs are likely to still be pending since v0.6.1, we can remove that compat code. Indeed, this happens on my node: we've not loaded the incoming HTLC because it's resolved. Signed-off-by: Rusty Russell --- wallet/wallet.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/wallet/wallet.c b/wallet/wallet.c index da3fa96d0..ff9506299 100644 --- a/wallet/wallet.c +++ b/wallet/wallet.c @@ -2648,21 +2648,12 @@ static bool wallet_stmt2htlc_out(struct wallet *wallet, u64 in_id = db_col_u64(stmt, "origin_htlc"); struct htlc_in *hin; + /* If it failed / succeeded already, we could have + * closed incoming htlc */ hin = remove_htlc_in_by_dbid(unconnected_htlcs_in, in_id); if (hin) htlc_out_connect_htlc_in(out, hin); out->am_origin = false; - if (!out->in && !out->preimage) { -#ifdef COMPAT_V061 - log_broken(wallet->log, - "Missing preimage for orphaned HTLC; replacing with zeros"); - out->preimage = talz(out, struct preimage); -#else - fatal("Unable to find corresponding htlc_in %"PRIu64 - " for unfulfilled htlc_out %"PRIu64, - in_id, out->dbid); -#endif - } db_col_ignore(stmt, "partid"); db_col_ignore(stmt, "groupid"); } else {