From 278b1ae10dd18e97b4d7c4a19d396094ea02fa9c Mon Sep 17 00:00:00 2001 From: divinerapier Date: Sun, 5 Sep 2021 09:36:38 +0800 Subject: [PATCH] fix: time.After will cause memory leak --- client/client.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/client.go b/client/client.go index 12a9656..8df2edd 100644 --- a/client/client.go +++ b/client/client.go @@ -1,6 +1,7 @@ package client import ( + "context" "errors" "sync" "time" @@ -123,17 +124,20 @@ func (client *Client) Send(req Request) (*Response, error) { client.catchersStore.Store(req.Extra, catcher) defer func() { - close(catcher) client.catchersStore.Delete(req.Extra) + close(catcher) }() client.jsonClient.Send(req) + ctx, cancel := context.WithTimeout(context.Background(), client.catchTimeout) + defer cancel() + select { case response := <-catcher: return response, nil - case <-time.After(client.catchTimeout): + case <-ctx.Done(): return nil, errors.New("response catching timeout") } }