From 48b2031269b949294b13ddb0b34058e50e117303 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 16 Jun 2023 19:09:40 +0700 Subject: [PATCH] internal/net: make ParallelDialer closes un-used conn So the connection can be reclaimed more quickly, reduce resources usage of ctrld, improving the performance a bit on low capacity devices. --- internal/net/net.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/net/net.go b/internal/net/net.go index 1c43bbb..9b47f2d 100644 --- a/internal/net/net.go +++ b/internal/net/net.go @@ -110,6 +110,8 @@ func (d *ParallelDialer) DialContext(ctx context.Context, network string, addrs ctx, cancel := context.WithCancel(ctx) defer cancel() + done := make(chan struct{}) + defer close(done) ch := make(chan *parallelDialerResult, len(addrs)) var wg sync.WaitGroup wg.Add(len(addrs)) @@ -122,7 +124,13 @@ func (d *ParallelDialer) DialContext(ctx context.Context, network string, addrs go func(addr string) { defer wg.Done() conn, err := d.Dialer.DialContext(ctx, network, addr) - ch <- ¶llelDialerResult{conn: conn, err: err} + select { + case ch <- ¶llelDialerResult{conn: conn, err: err}: + case <-done: + if conn != nil { + conn.Close() + } + } }(addr) } @@ -134,6 +142,5 @@ func (d *ParallelDialer) DialContext(ctx context.Context, network string, addrs } errs = append(errs, res.err) } - return nil, errors.Join(errs...) }