TryAcquire does not overfill pool
This commit is contained in:
committed by
Jack Christensen
parent
8f8e2d8cfa
commit
ba6bef1563
@@ -387,7 +387,28 @@ func (p *Pool) TryAcquire(ctx context.Context) (*Resource, error) {
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
go p.CreateResource(ctx)
|
if len(p.allResources) < int(p.maxSize) {
|
||||||
|
res := &Resource{pool: p, creationTime: time.Now(), lastUsedNano: nanotime(), status: resourceStatusConstructing}
|
||||||
|
p.allResources = append(p.allResources, res)
|
||||||
|
p.destructWG.Add(1)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
value, err := p.constructResourceValue(ctx)
|
||||||
|
defer p.cond.Signal()
|
||||||
|
p.cond.L.Lock()
|
||||||
|
defer p.cond.L.Unlock()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
p.allResources = removeResource(p.allResources, res)
|
||||||
|
p.destructWG.Done()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
res.value = value
|
||||||
|
res.status = resourceStatusIdle
|
||||||
|
p.idleResources = append(p.idleResources, res)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
return nil, ErrNotAvailable
|
return nil, ErrNotAvailable
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user