From 0fb2d5d4d3ee4fbe9bc2f04d678f0574eed182a2 Mon Sep 17 00:00:00 2001 From: Andrei Korzhevskii Date: Fri, 27 Nov 2015 13:52:24 +0300 Subject: [PATCH] client: fix goroutine leak in unreleased context If headerTimeout is not zero then two context are created but only one is released. cancelCtx in this case is never released which leads to goroutine leak inside it. --- client/client.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/client.go b/client/client.go index da86a0bc7..ece4cc0cd 100644 --- a/client/client.go +++ b/client/client.go @@ -378,9 +378,12 @@ func (c *simpleHTTPClient) Do(ctx context.Context, act httpAction) (*http.Respon return nil, nil, err } - hctx, hcancel := context.WithCancel(ctx) + var hctx context.Context + var hcancel context.CancelFunc if c.headerTimeout > 0 { hctx, hcancel = context.WithTimeout(ctx, c.headerTimeout) + } else { + hctx, hcancel = context.WithCancel(ctx) } defer hcancel()