From ec1504e0cedbfeffc35e50a09633e51e93bf0e2d Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 5 Mar 2026 19:09:27 +0200 Subject: more on this --- internal/server/handlers/basehandler.go | 17 +++++++++++++++++ internal/server/handlers/readcommand.go | 2 ++ 2 files changed, 19 insertions(+) (limited to 'internal/server') diff --git a/internal/server/handlers/basehandler.go b/internal/server/handlers/basehandler.go index d510139..030baf9 100644 --- a/internal/server/handlers/basehandler.go +++ b/internal/server/handlers/basehandler.go @@ -77,6 +77,13 @@ func (h *baseHandler) Read(p []byte) (n int, err error) { return n, nil } + pollInterval := time.Second + if h.turbo.enabled() { + // Turbo reads require tighter wake-ups so we can continue draining the turbo channel. + pollInterval = h.turbo.resolvedReadRetryInterval() + } + poll := time.After(pollInterval) + select { case message := <-h.serverMessages: if len(message) > 0 && message[0] == '.' { @@ -131,6 +138,16 @@ func (h *baseHandler) Read(p []byte) (n int, err error) { case <-h.done.Done(): err = io.EOF return + + case <-poll: + // Wake periodically so turbo mode transitions don't leave this read blocked forever. + select { + case <-h.done.Done(): + err = io.EOF + return + default: + } + return } return } diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go index f99c740..c03900f 100644 --- a/internal/server/handlers/readcommand.go +++ b/internal/server/handlers/readcommand.go @@ -372,6 +372,8 @@ func (r *readCommand) ensureTurboModeEnabled() { return } r.server.EnableTurboMode() + // Wake a potentially blocked reader goroutine so it can switch to turbo drain path. + r.server.SendServerMessage(".turbo wake") } func (r *readCommand) makeTurboWriter() TurboWriter { -- cgit v1.2.3