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",