]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix deadlock when checking whether to send keep alive
authorMatt Joiner <anacrolix@gmail.com>
Wed, 18 Aug 2021 06:23:04 +0000 (16:23 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 19 Aug 2021 03:37:00 +0000 (13:37 +1000)
peer-conn-msg-writer.go

index 16892546e77618de610199d884324000a9c442e1..dff4eb9ec8f98405821ffa36ae9122dcb1e2b67d 100644 (file)
@@ -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)
                }