2
0

Fix several memory leaks caused by modifying a slice length without

removing the elements from the backing array.
This commit is contained in:
Alexander Staubo
2021-11-11 21:34:15 +01:00
committed by Jack Christensen
parent 0cff23235f
commit 69a4c02937
+4 -3
View File
@@ -298,6 +298,7 @@ func (p *Pool) doAcquire(ctx context.Context, block bool) (*Resource, error) {
// If a resource is available now
if len(p.idleResources) > 0 {
res := p.idleResources[len(p.idleResources)-1]
p.idleResources[len(p.idleResources)-1] = nil // Avoid memory leak
p.idleResources = p.idleResources[:len(p.idleResources)-1]
res.status = resourceStatusAcquired
if emptyAcquire {
@@ -393,9 +394,8 @@ func (p *Pool) AcquireAllIdle() []*Resource {
for _, res := range p.idleResources {
res.status = resourceStatusAcquired
}
resources := make([]*Resource, len(p.idleResources))
copy(resources, p.idleResources)
p.idleResources = p.idleResources[0:0]
resources := p.idleResources // Swap out current slice
p.idleResources = nil
p.cond.L.Unlock()
return resources
@@ -482,6 +482,7 @@ func removeResource(slice []*Resource, res *Resource) []*Resource {
for i := range slice {
if slice[i] == res {
slice[i] = slice[len(slice)-1]
slice[len(slice)-1] = nil // Avoid memory leak
return slice[:len(slice)-1]
}
}