diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-05 19:09:27 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-05 19:09:27 +0200 |
| commit | ec1504e0cedbfeffc35e50a09633e51e93bf0e2d (patch) | |
| tree | edd7259fc8eacd10b2bc3015096548c8fc36d461 /internal/server | |
| parent | 5d1b9f1062d38c301c0995ec6da980bdf5e48332 (diff) | |
more on this
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/handlers/basehandler.go | 17 | ||||
| -rw-r--r-- | internal/server/handlers/readcommand.go | 2 |
2 files changed, 19 insertions, 0 deletions
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 { |
