From d9ef724a278f973d711eb021fb76738c79a0300c Mon Sep 17 00:00:00 2001 From: Kenta Iwasaki Date: Sat, 13 Jun 2020 01:21:18 +0900 Subject: [PATCH] conn, pool: reset errors when putting request/write back to pool, remove erroneous request release when peer closes connection --- conn.go | 1 - pool.go | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/conn.go b/conn.go index b62e096..7c274ca 100644 --- a/conn.go +++ b/conn.go @@ -373,7 +373,6 @@ func (c *Conn) close(err error) { pr.wg.Done() delete(c.reqs, seq) - releasePendingRequest(pr) } c.seq = 0 diff --git a/pool.go b/pool.go index 34781aa..4191001 100644 --- a/pool.go +++ b/pool.go @@ -52,7 +52,7 @@ func acquirePendingWrite(buf *bytebufferpool.ByteBuffer, wait bool) *pendingWrit return pw } -func releasePendingWrite(pw *pendingWrite) { pendingWritePool.Put(pw) } +func releasePendingWrite(pw *pendingWrite) { pw.err = nil; pendingWritePool.Put(pw) } type pendingRequest struct { dst []byte // dst to copy response to @@ -72,7 +72,11 @@ func acquirePendingRequest(dst []byte) *pendingRequest { return pr } -func releasePendingRequest(pr *pendingRequest) { pendingRequestPool.Put(pr) } +func releasePendingRequest(pr *pendingRequest) { + pr.dst = nil + pr.err = nil + pendingRequestPool.Put(pr) +} var zeroTime time.Time