From 33f118db6339d21edabb16b885fb2fbbe04787a1 Mon Sep 17 00:00:00 2001 From: yihuang Date: Fri, 24 May 2024 16:08:11 +0800 Subject: [PATCH 1/2] fix: daemon crash for sending to closed channel --- sync/client_conn.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sync/client_conn.go b/sync/client_conn.go index b1cc22d..e8d5495 100644 --- a/sync/client_conn.go +++ b/sync/client_conn.go @@ -20,7 +20,17 @@ func (c *DefaultClient) nextID() (id string) { } func (c *DefaultClient) responsesWorker() { + // sending to channel could panic due to concurrent close + defer func() { + c.wg.Done() + + if err := recover(); err != nil { + c.log.Errorw("panic in responsesWorker", "error", err) + } + }() + for { + c.log.Infof("read socket") res, err := c.readSocket() if err != nil { if errors.Is(err, context.Canceled) || @@ -43,8 +53,6 @@ func (c *DefaultClient) responsesWorker() { ch <- res } } - - c.wg.Done() } func (c *DefaultClient) makeRequest(ctx context.Context, req *sync.Request) (chan *sync.Response, error) { From 8056c36f4d219af19566036fc291cb30feb0f1f2 Mon Sep 17 00:00:00 2001 From: yihuang Date: Fri, 24 May 2024 16:14:21 +0800 Subject: [PATCH 2/2] cleanup --- sync/client_conn.go | 1 - 1 file changed, 1 deletion(-) diff --git a/sync/client_conn.go b/sync/client_conn.go index e8d5495..3348c2e 100644 --- a/sync/client_conn.go +++ b/sync/client_conn.go @@ -30,7 +30,6 @@ func (c *DefaultClient) responsesWorker() { }() for { - c.log.Infof("read socket") res, err := c.readSocket() if err != nil { if errors.Is(err, context.Canceled) ||