From 133aa8f237f061e458d4c16ec64f7de43231442c Mon Sep 17 00:00:00 2001 From: Thiago Kenji Okada Date: Thu, 12 Sep 2024 09:25:57 +0100 Subject: [PATCH] event/event: return errors from conn.SetReadDeadline --- event/event.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/event/event.go b/event/event.go index 69e9f72..4f1fd1f 100644 --- a/event/event.go +++ b/event/event.go @@ -2,6 +2,7 @@ package event import ( "context" + "errors" "fmt" "net" "strings" @@ -95,10 +96,8 @@ func (c *EventClient) Subscribe(ctx context.Context, ev EventHandler, events ... } } -func readWithContext(ctx context.Context, conn net.Conn, buf []byte) (int, error) { +func readWithContext(ctx context.Context, conn net.Conn, buf []byte) (n int, err error) { done := make(chan struct{}) - var n int - var err error // Start a goroutine to perform the read go func() { @@ -111,12 +110,19 @@ func readWithContext(ctx context.Context, conn net.Conn, buf []byte) (int, error return n, err case <-ctx.Done(): // Set a short deadline to unblock the Read() - conn.SetReadDeadline(time.Now()) + err = conn.SetReadDeadline(time.Now()) + if err != nil { + return 0, err + } // Reset read deadline - defer conn.SetReadDeadline(time.Time{}) + defer func() { + if e := conn.SetReadDeadline(time.Time{}); e != nil { + err = errors.Join(err, e) + } + }() // Make sure that the goroutine is done to avoid leaks <-done - return 0, ctx.Err() + return 0, errors.Join(err, ctx.Err()) } }