From 9756ed2b0651b668853774715d144d34cbf30924 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Thu, 24 Dec 2020 14:38:58 +0300 Subject: [PATCH] network: set timeout on write Fix a bug occuring under high load when node hangs during this write. --- pkg/network/tcp_peer.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/network/tcp_peer.go b/pkg/network/tcp_peer.go index 5643c335d..76fe542da 100644 --- a/pkg/network/tcp_peer.go +++ b/pkg/network/tcp_peer.go @@ -178,6 +178,7 @@ func (p *TCPPeer) handleQueues() { var p2pSkipCounter uint32 const p2pSkipDivisor = 4 + var writeTimeout = time.Duration(p.server.chain.GetConfig().SecondsPerBlock) * time.Second for { var msg []byte @@ -211,6 +212,10 @@ func (p *TCPPeer) handleQueues() { case msg = <-p.sendQ: } } + err = p.conn.SetWriteDeadline(time.Now().Add(writeTimeout)) + if err != nil { + break + } _, err = p.conn.Write(msg) if err != nil { break