From ba6bef1563864ec539867668b6dc506df92df15e Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Sun, 28 Nov 2021 16:19:29 -0600 Subject: [PATCH] TryAcquire does not overfill pool --- pool.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/pool.go b/pool.go index f742628..1baf88c 100644 --- a/pool.go +++ b/pool.go @@ -387,7 +387,28 @@ func (p *Pool) TryAcquire(ctx context.Context) (*Resource, error) { 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 }