From fabdcaf62be255135a970988744e28c147dfab5e Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 26 May 2016 15:25:24 +0930 Subject: [PATCH] daemon: close correctly when guest fails. Otherwise we can receive another packet. Signed-off-by: Rusty Russell --- daemon/peer.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/daemon/peer.c b/daemon/peer.c index 13aae6042..c127ba4b8 100644 --- a/daemon/peer.c +++ b/daemon/peer.c @@ -130,6 +130,8 @@ void set_peer_state(struct peer *peer, enum state newstate, const char *caller) static void peer_breakdown(struct peer *peer) { + peer->cond = PEER_CLOSED; + /* If we have a closing tx, use it. */ if (peer->closing.their_sig) { log_unusual(peer->log, "Peer breakdown: sending close tx"); @@ -173,13 +175,13 @@ static void state_single(struct peer *peer, if (broadcast) broadcast_tx(peer, broadcast); + if (peer->state == STATE_ERR_BREAKDOWN) + peer_breakdown(peer); + /* Start output if not running already; it will close conn. */ if (peer->cond == PEER_CLOSED) io_wake(peer); - if (peer->state == STATE_ERR_BREAKDOWN) - peer_breakdown(peer); - /* FIXME: Some of these should just result in this peer being killed? */ else if (state_is_error(peer->state)) { log_broken(peer->log, "Entered error state %s",