From: Matt Joiner Date: Wed, 18 Aug 2021 06:23:04 +0000 (+1000) Subject: Fix deadlock when checking whether to send keep alive X-Git-Tag: v1.30.3~8 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=16c4b0888510fe2467745d041f4e70625f4d3514;p=btrtrc.git Fix deadlock when checking whether to send keep alive --- diff --git a/peer-conn-msg-writer.go b/peer-conn-msg-writer.go index 16892546..dff4eb9e 100644 --- a/peer-conn-msg-writer.go +++ b/peer-conn-msg-writer.go @@ -79,14 +79,16 @@ func (cn *peerConnMsgWriter) run(keepAliveTimeout time.Duration) { if cn.closed.IsSet() { return } + keepAlive := false if cn.writeBuffer.Len() == 0 { func() { cn.mu.Unlock() defer cn.mu.Lock() cn.fillWriteBuffer() + keepAlive = cn.keepAlive() }() } - if cn.writeBuffer.Len() == 0 && time.Since(lastWrite) >= keepAliveTimeout && cn.keepAlive() { + if cn.writeBuffer.Len() == 0 && time.Since(lastWrite) >= keepAliveTimeout && keepAlive { cn.writeBuffer.Write(pp.Message{Keepalive: true}.MustMarshalBinary()) torrent.Add("written keepalives", 1) }