diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index fbb2ef89f..bfb4e5ce7 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -19,6 +19,8 @@ # Bug Fixes +* A bug that caused certain API calls to hang [has been fixed](https://github.com/lightningnetwork/lnd/pull/8158). + * [LND now sets the `BADONION`](https://github.com/lightningnetwork/lnd/pull/7937) bit when sending `update_fail_malformed_htlc`. This avoids a force close with other implementations. diff --git a/peer/brontide.go b/peer/brontide.go index 9453be39f..d2baf89c6 100644 --- a/peer/brontide.go +++ b/peer/brontide.go @@ -722,9 +722,15 @@ func (p *Brontide) Start() error { if len(msgs) > 0 { p.log.Infof("Sending %d channel sync messages to peer after "+ "loading active channels", len(msgs)) - if err := p.SendMessage(true, msgs...); err != nil { - p.log.Warnf("Failed sending channel sync "+ - "messages to peer: %v", err) + + // Send the messages directly via writeMessage and bypass the + // writeHandler goroutine to avoid cases where writeHandler + // may exit and cause a deadlock. + for _, msg := range msgs { + if err := p.writeMessage(msg); err != nil { + return fmt.Errorf("unable to send reestablish"+ + "msg: %v", err) + } } } @@ -2088,11 +2094,6 @@ func (p *Brontide) logWireMessage(msg lnwire.Message, read bool) { // with a nil message iff a timeout error is returned. This will continue to // flush the pending message to the wire. func (p *Brontide) writeMessage(msg lnwire.Message) error { - // Simply exit if we're shutting down. - if atomic.LoadInt32(&p.disconnect) != 0 { - return lnpeer.ErrPeerExiting - } - // Only log the message on the first attempt. if msg != nil { p.logWireMessage(msg, false)