From 9b6e191b0a92aa5c67a1e90fbed5001e6ed273b4 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Sun, 22 Aug 2021 20:05:53 +1000 Subject: [PATCH] Avoid reallocating keep alive timer on each pass --- peer-conn-msg-writer.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/peer-conn-msg-writer.go b/peer-conn-msg-writer.go index 4dbf00e4..3948eb64 100644 --- a/peer-conn-msg-writer.go +++ b/peer-conn-msg-writer.go @@ -60,6 +60,7 @@ type peerConnMsgWriter struct { // connection is writable. func (cn *peerConnMsgWriter) run(keepAliveTimeout time.Duration) { lastWrite := time.Now() + keepAliveTimer := time.NewTimer(keepAliveTimeout) frontBuf := new(bytes.Buffer) for { if cn.closed.IsSet() { @@ -78,7 +79,7 @@ func (cn *peerConnMsgWriter) run(keepAliveTimeout time.Duration) { select { case <-cn.closed.Done(): case <-writeCond: - case <-time.After(time.Until(lastWrite.Add(keepAliveTimeout))): + case <-keepAliveTimer.C: } continue } @@ -88,6 +89,7 @@ func (cn *peerConnMsgWriter) run(keepAliveTimeout time.Duration) { n, err := cn.w.Write(frontBuf.Bytes()) if n != 0 { lastWrite = time.Now() + keepAliveTimer.Reset(keepAliveTimeout) } if err != nil { cn.logger.WithDefaultLevel(log.Debug).Printf("error writing: %v", err) -- 2.48.1