From 93a3f7de51bef3818db46f8c1c7f64d16733e5c1 Mon Sep 17 00:00:00 2001 From: Jan Dubsky Date: Fri, 30 Sep 2022 13:46:09 +0200 Subject: [PATCH] Fix goroutine leak --- pool.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pool.go b/pool.go index bd6f71b..8203ee4 100644 --- a/pool.go +++ b/pool.go @@ -355,11 +355,16 @@ func (p *Pool[T]) acquire(ctx context.Context) (*Resource[T], error) { if err != nil { p.allResources = removeResource(p.allResources, res) p.destructWG.Done() - - constructErrCh <- err - p.cond.L.Unlock() p.cond.Signal() + + select { + case constructErrCh <- err: + case <-ctx.Done(): + // The caller is cancelled, so + // no-one awaits the error. This + // branch avoid goroutine leak. + } return }