]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Avoid reallocating keep alive timer on each pass v1.30.4
authorMatt Joiner <anacrolix@gmail.com>
Sun, 22 Aug 2021 10:05:53 +0000 (20:05 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 22 Aug 2021 10:05:53 +0000 (20:05 +1000)
peer-conn-msg-writer.go

index 4dbf00e407d70df7c5b6944bb6010481ed288d47..3948eb64263f9bebcdbd6e36578e78d7e8ac9d91 100644 (file)
@@ -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)