diff --git a/multipool.go b/multipool.go index eac5916..4bf9992 100644 --- a/multipool.go +++ b/multipool.go @@ -108,6 +108,10 @@ func NewMultiPool(size, sizePerPool int, lbs LoadBalancingStrategy, options ...O for i := 0; i < size; i++ { pool, err := NewPool(sizePerPool, options...) if err != nil { + // Release all previously created pools to avoid resource leak + for j := 0; j < i; j++ { + pools[j].Release() + } return nil, err } pools[i] = pool diff --git a/multipool_func.go b/multipool_func.go index c2ceb13..f00c2be 100644 --- a/multipool_func.go +++ b/multipool_func.go @@ -55,6 +55,10 @@ func NewMultiPoolWithFunc(size, sizePerPool int, fn func(any), lbs LoadBalancing for i := 0; i < size; i++ { pool, err := NewPoolWithFunc(sizePerPool, fn, options...) if err != nil { + // Release all previously created pools to avoid resource leak + for j := 0; j < i; j++ { + pools[j].Release() + } return nil, err } pools[i] = pool diff --git a/multipool_func_generic.go b/multipool_func_generic.go index 2aad831..2d8dc9d 100644 --- a/multipool_func_generic.go +++ b/multipool_func_generic.go @@ -51,6 +51,10 @@ func NewMultiPoolWithFuncGeneric[T any](size, sizePerPool int, fn func(T), lbs L for i := 0; i < size; i++ { pool, err := NewPoolWithFuncGeneric(sizePerPool, fn, options...) if err != nil { + // Release all previously created pools to avoid resource leak + for j := 0; j < i; j++ { + pools[j].Release() + } return nil, err } pools[i] = pool