From c4a4239ec543442ede77d37e0c5a3eba74c80cc1 Mon Sep 17 00:00:00 2001 From: hehaifeng <240657481@qq.com> Date: Sun, 24 May 2026 18:21:20 +0800 Subject: [PATCH] fix: release already created pools on NewMultiPool failure --- multipool.go | 4 ++++ multipool_func.go | 4 ++++ multipool_func_generic.go | 4 ++++ 3 files changed, 12 insertions(+) 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