From e6e0e7fd81f05986e24fa51ae4cc926b3440a713 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Sat, 25 Jan 2020 17:14:44 -0600 Subject: [PATCH] Get last used time outside of pool mutex Under heavy contention this slightly improves performance by spending less time in the mutex. --- pool.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pool.go b/pool.go index 7d5ee04..7943433 100644 --- a/pool.go +++ b/pool.go @@ -46,7 +46,7 @@ func (res *Resource) Release() { if res.status != resourceStatusAcquired { panic("tried to release resource that is not acquired") } - res.pool.releaseAcquiredResource(res, true) + res.pool.releaseAcquiredResource(res, time.Now()) } // Release returns the resource to the pool after it was acquired via AcquireAllIdle. @@ -55,7 +55,7 @@ func (res *Resource) ReleaseIdle() { if res.status != resourceStatusAcquired { panic("tried to release resource that is not acquired") } - res.pool.releaseAcquiredResource(res, false) + res.pool.releaseAcquiredResource(res, res.lastUsedTime) } // Destroy returns the resource to the pool for destruction. res must not be @@ -358,13 +358,11 @@ func (p *Pool) AcquireAllIdle() []*Resource { } // releaseAcquiredResource returns res to the the pool. -func (p *Pool) releaseAcquiredResource(res *Resource, updateLastUsed bool) { +func (p *Pool) releaseAcquiredResource(res *Resource, lastUsedTime time.Time) { p.cond.L.Lock() if !p.closed { - if updateLastUsed { - res.lastUsedTime = time.Now() - } + res.lastUsedTime = lastUsedTime res.status = resourceStatusIdle p.idleResources = append(p.idleResources, res) } else {