From 1773b03380fed4a6967af8b09ac5f6479508f785 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 3 Apr 2018 16:38:53 +0930 Subject: [PATCH] channeld: accept SHUTDOWN before channel is locked. Fixes: #1308 Signed-off-by: Rusty Russell --- channeld/channel.c | 4 +++- lightningd/channel_control.c | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/channeld/channel.c b/channeld/channel.c index 1bdf7f36f..45562d0de 100644 --- a/channeld/channel.c +++ b/channeld/channel.c @@ -1589,7 +1589,9 @@ static void peer_in(struct peer *peer, const u8 *msg) /* Must get funding_locked before almost anything. */ if (!peer->funding_locked[REMOTE]) { - if (type != WIRE_FUNDING_LOCKED && type != WIRE_PONG) { + if (type != WIRE_FUNDING_LOCKED + && type != WIRE_PONG + && type != WIRE_SHUTDOWN) { peer_failed(&peer->cs, peer->gossip_index, &peer->channel_id, diff --git a/lightningd/channel_control.c b/lightningd/channel_control.c index c730704da..93e6c9222 100644 --- a/lightningd/channel_control.c +++ b/lightningd/channel_control.c @@ -77,9 +77,9 @@ static void peer_got_shutdown(struct channel *channel, const u8 *msg) } /* If we weren't already shutting down, we are now */ - if (channel->state == CHANNELD_NORMAL) + if (channel->state != CHANNELD_SHUTTING_DOWN) channel_set_state(channel, - CHANNELD_NORMAL, CHANNELD_SHUTTING_DOWN); + channel->state, CHANNELD_SHUTTING_DOWN); /* TODO(cdecker) Selectively save updated fields to DB */ wallet_channel_save(ld->wallet, channel);