From ce28ca17d1bfa3f43d05a27d6064c4f2118071de Mon Sep 17 00:00:00 2001 From: Akshay Nanavare <43538145+akshaynanavare@users.noreply.github.com> Date: Tue, 26 Mar 2024 17:05:40 +0530 Subject: [PATCH] bug: return error before creating multi pools if lbs is invalid to avoid leaks (#317) --- multipool.go | 6 +++--- multipool_func.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/multipool.go b/multipool.go index 1e8b27b..1de75ae 100644 --- a/multipool.go +++ b/multipool.go @@ -56,6 +56,9 @@ type MultiPool struct { // NewMultiPool instantiates a MultiPool with a size of the pool list and a size // per pool, and the load-balancing strategy. func NewMultiPool(size, sizePerPool int, lbs LoadBalancingStrategy, options ...Option) (*MultiPool, error) { + if lbs != RoundRobin && lbs != LeastTasks { + return nil, ErrInvalidLoadBalancingStrategy + } pools := make([]*Pool, size) for i := 0; i < size; i++ { pool, err := NewPool(sizePerPool, options...) @@ -64,9 +67,6 @@ func NewMultiPool(size, sizePerPool int, lbs LoadBalancingStrategy, options ...O } pools[i] = pool } - if lbs != RoundRobin && lbs != LeastTasks { - return nil, ErrInvalidLoadBalancingStrategy - } return &MultiPool{pools: pools, lbs: lbs}, nil } diff --git a/multipool_func.go b/multipool_func.go index 8101d31..c7d31ff 100644 --- a/multipool_func.go +++ b/multipool_func.go @@ -45,6 +45,9 @@ type MultiPoolWithFunc struct { // NewMultiPoolWithFunc instantiates a MultiPoolWithFunc with a size of the pool list and a size // per pool, and the load-balancing strategy. func NewMultiPoolWithFunc(size, sizePerPool int, fn func(interface{}), lbs LoadBalancingStrategy, options ...Option) (*MultiPoolWithFunc, error) { + if lbs != RoundRobin && lbs != LeastTasks { + return nil, ErrInvalidLoadBalancingStrategy + } pools := make([]*PoolWithFunc, size) for i := 0; i < size; i++ { pool, err := NewPoolWithFunc(sizePerPool, fn, options...) @@ -53,9 +56,6 @@ func NewMultiPoolWithFunc(size, sizePerPool int, fn func(interface{}), lbs LoadB } pools[i] = pool } - if lbs != RoundRobin && lbs != LeastTasks { - return nil, ErrInvalidLoadBalancingStrategy - } return &MultiPoolWithFunc{pools: pools, lbs: lbs}, nil }