2
0

Get last used time outside of pool mutex

Under heavy contention this slightly improves performance by spending
less time in the mutex.
This commit is contained in:
Jack Christensen
2020-01-25 17:14:44 -06:00
parent 6897b9f0cd
commit e6e0e7fd81
+4 -6
View File
@@ -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 {