mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 13:25:43 +01:00
9b8fe618f6
Maintaining it was always fraught, since the command could go away if the JSON RPC died. Most recently, it was broken again on shutdown (see below). In future we may allow pay commands to block on previous payments, so it won't even be a 1:1 mapping. Generalize it: keep commands in a simple list and do a lookup when a payment fails/succeeds. Valgrind error file: valgrind-errors.5732 ==5732== Invalid read of size 8 ==5732== at 0x4149FD: remove_cmd_from_hout (pay.c:292) ==5732== by 0x468BAB: notify (tal.c:237) ==5732== by 0x469077: del_tree (tal.c:400) ==5732== by 0x4690C7: del_tree (tal.c:410) ==5732== by 0x46948A: tal_free (tal.c:509) ==5732== by 0x40F1EA: main (lightningd.c:362) ==5732== Address 0x69df148 is 1,512 bytes inside a block of size 1,544 free'd ==5732== at 0x4C2EDEB: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==5732== by 0x469150: del_tree (tal.c:421) ==5732== by 0x46948A: tal_free (tal.c:509) ==5732== by 0x4198F2: free_htlcs (peer_control.c:1281) ==5732== by 0x40EBA9: shutdown_subdaemons (lightningd.c:209) ==5732== by 0x40F1DE: main (lightningd.c:360) ==5732== Block was alloc'd at ==5732== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==5732== by 0x468C30: allocate (tal.c:250) ==5732== by 0x4691F7: tal_alloc_ (tal.c:448) ==5732== by 0x40A279: new_htlc_out (htlc_end.c:143) ==5732== by 0x41FD64: send_htlc_out (peer_htlcs.c:397) ==5732== by 0x41511C: send_payment (pay.c:388) ==5732== by 0x41589E: json_sendpay (pay.c:513) ==5732== by 0x40D9B1: parse_request (jsonrpc.c:600) ==5732== by 0x40DCAC: read_json (jsonrpc.c:667) ==5732== by 0x45C706: next_plan (io.c:59) ==5732== by 0x45D1DD: do_plan (io.c:387) ==5732== by 0x45D21B: io_ready (io.c:397) Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
51 lines
1.9 KiB
C
51 lines
1.9 KiB
C
/* All about the HTLCs/commitment transactions for a particular peer. */
|
|
#ifndef LIGHTNING_LIGHTNINGD_PEER_HTLCS_H
|
|
#define LIGHTNING_LIGHTNINGD_PEER_HTLCS_H
|
|
#include "config.h"
|
|
#include <ccan/short_types/short_types.h>
|
|
#include <common/derive_basepoints.h>
|
|
#include <common/htlc_wire.h>
|
|
|
|
/* FIXME: Define serialization primitive for this? */
|
|
struct channel_info {
|
|
struct channel_config their_config;
|
|
struct pubkey remote_fundingkey;
|
|
struct basepoints theirbase;
|
|
/* The old_remote_per_commit is for the locked-in remote commit_tx,
|
|
* and the remote_per_commit is for the commit_tx we're modifying now. */
|
|
struct pubkey remote_per_commit, old_remote_per_commit;
|
|
/* In transition, these can be different! */
|
|
u32 feerate_per_kw[NUM_SIDES];
|
|
};
|
|
|
|
/* Get all HTLCs for a peer, to send in init message. */
|
|
void peer_htlcs(const tal_t *ctx,
|
|
const struct peer *peer,
|
|
struct added_htlc **htlcs,
|
|
enum htlc_state **htlc_states,
|
|
struct fulfilled_htlc **fulfilled_htlcs,
|
|
enum side **fulfilled_sides,
|
|
struct failed_htlc **failed_htlcs,
|
|
enum side **failed_sides);
|
|
|
|
void peer_sending_commitsig(struct peer *peer, const u8 *msg);
|
|
void peer_got_commitsig(struct peer *peer, const u8 *msg);
|
|
void peer_got_revoke(struct peer *peer, const u8 *msg);
|
|
|
|
void update_per_commit_point(struct peer *peer,
|
|
const struct pubkey *per_commitment_point);
|
|
|
|
enum onion_type send_htlc_out(struct peer *out, u64 amount, u32 cltv,
|
|
const struct sha256 *payment_hash,
|
|
const u8 *onion_routing_packet,
|
|
struct htlc_in *in,
|
|
struct htlc_out **houtp);
|
|
|
|
struct htlc_out *find_htlc_out_by_ripemd(const struct peer *peer,
|
|
const struct ripemd160 *ripemd160);
|
|
void onchain_failed_our_htlc(const struct peer *peer,
|
|
const struct htlc_stub *htlc,
|
|
const char *why);
|
|
void onchain_fulfilled_htlc(struct peer *peer, const struct preimage *preimage);
|
|
#endif /* LIGHTNING_LIGHTNINGD_PEER_HTLCS_H */
|