From e157465cd3853d9ec30a934481c530708abd3ff5 Mon Sep 17 00:00:00 2001 From: Jille Timmermans Date: Tue, 13 May 2025 17:20:24 +0200 Subject: [PATCH] client: client: Better error handling in Watcher.Close() The previous implementation might've ignored a real error if the last error happened to be context.Cancelled. While we're at it, might as well use the new errors.Join() to actually return all errors. Signed-off-by: Jille Timmermans --- client/v3/watch.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/client/v3/watch.go b/client/v3/watch.go index a46f98b8e28..8e19f87e2f1 100644 --- a/client/v3/watch.go +++ b/client/v3/watch.go @@ -391,14 +391,11 @@ func (w *watcher) Close() (err error) { w.streams = nil w.mu.Unlock() for _, wgs := range streams { - if werr := wgs.close(); werr != nil { - err = werr + // Consider context.Canceled as a successful close + if werr := wgs.close(); werr != nil && !errors.Is(err, context.Canceled) { + err = errors.Join(err, werr) } } - // Consider context.Canceled as a successful close - if errors.Is(err, context.Canceled) { - err = nil - } return err }