brontide: fix peer disconnection issue

In case when the rbf coop close feature was active we would not
properly disconnect the peer.
This commit is contained in:
ziggie
2025-05-29 10:17:35 +02:00
committed by Oliver Gugger
parent 275ab7da1d
commit 49d40c8ea1

View File

@@ -3804,18 +3804,28 @@ func (p *Brontide) chanFlushEventSentinel(chanCloser *chancloser.RbfChanCloser,
// We'll wait until the channel enters the ChannelFlushing state. We
// exit after a success loop. As after the first RBF iteration, the
// channel will always be flushed.
for newState := range newStateChan {
if _, ok := newState.(*chancloser.ChannelFlushing); ok {
peerLog.Infof("ChannelPoint(%v): rbf coop "+
"close is awaiting a flushed state, "+
"registering with link..., ",
channel.ChannelPoint())
for {
select {
case newState, ok := <-newStateChan:
if !ok {
return
}
// Request the link to send the event once the channel
// is flushed. We only need this event sent once, so we
// can exit now.
link.OnFlushedOnce(sendChanFlushed)
if _, ok := newState.(*chancloser.ChannelFlushing); ok {
peerLog.Infof("ChannelPoint(%v): rbf coop "+
"close is awaiting a flushed state, "+
"registering with link..., ",
channel.ChannelPoint())
// Request the link to send the event once the
// channel is flushed. We only need this event
// sent once, so we can exit now.
link.OnFlushedOnce(sendChanFlushed)
return
}
case <-p.cg.Done():
return
}
}