wallet: Add a final `CLOSED` state to channels

Instead of deleting the channels we will simple mark them as `CLOSED` from now
on. This is needed for some of the other tables not to end up with dangling
references that would otherwise survive the channel lifetime, e.g., forwards
and transactions.

Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
Christian Decker 2019-06-22 14:49:30 +02:00 committed by Rusty Russell
parent 7046d0220c
commit 1dbdc74bc3
3 changed files with 10 additions and 5 deletions

View File

@ -26,8 +26,11 @@ enum channel_state {
FUNDING_SPEND_SEEN,
/* On chain */
ONCHAIN
ONCHAIN,
/* Final state after we have fully settled on-chain */
CLOSED
};
#define CHANNEL_STATE_MAX ONCHAIN
#define CHANNEL_STATE_MAX CLOSED
#endif /* LIGHTNING_LIGHTNINGD_CHANNEL_STATE_H */

View File

@ -842,7 +842,10 @@ peer_connected_hook_cb(struct peer_connected_hook_payload *payload,
case ONCHAIN:
case FUNDING_SPEND_SEEN:
case CLOSINGD_COMPLETE:
/* Channel is supposed to be active! */
/* Channel is supposed to be active!*/
abort();
case CLOSED:
/* Channel should not have been loaded */
abort();
/* We consider this "active" but we only send an error */

View File

@ -850,8 +850,7 @@ bool wallet_channels_load_active(struct wallet *w)
sqlite3_stmt *stmt;
/* We load all channels */
stmt = db_select(w->db, "%s FROM channels;", channel_fields);
stmt = db_select(w->db, "%s FROM channels WHERE state < %d;", channel_fields, CLOSED);
w->max_channel_dbid = 0;
int count = 0;