diff --git a/session.go b/session.go index dae9f3f..f6f491e 100644 --- a/session.go +++ b/session.go @@ -316,8 +316,14 @@ func (w *session) reset(ctx context.Context) bool { default: } - // refresh session - time.Sleep(w.config.ReconnectDelay) + // refresh session timeout + timer := time.NewTimer(w.config.ReconnectDelay) + select { + case <-ctx.Done(): + timer.Stop() + return false + case <-timer.C: + } w.restartCount.Add(1) return true } diff --git a/session_test.go b/session_test.go index cc57072..e9ca0d7 100644 --- a/session_test.go +++ b/session_test.go @@ -829,3 +829,28 @@ func TestSession_Send(t *testing.T) { assert.ErrorIs(t, err, ErrConnectionUnavailable) }) } + +func TestSessionResetCancel(t *testing.T) { + w := &session{ + config: SessionConfig{ReconnectDelay: 30 * time.Second}, + restartCount: &atomic.Uint64{}, + } + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan bool, 1) + + go func() { + done <- w.reset(ctx) + }() + + time.Sleep(50 * time.Millisecond) + cancel() + + honeybeetest.Eventually(t, func() bool { + select { + case ok := <-done: + return !ok + default: + return false + } + }, "expected reset to return false promptly after cancel") +}