summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-05 19:09:27 +0200
committerPaul Buetow <paul@buetow.org>2026-03-05 19:09:27 +0200
commitec1504e0cedbfeffc35e50a09633e51e93bf0e2d (patch)
treeedd7259fc8eacd10b2bc3015096548c8fc36d461 /internal/server
parent5d1b9f1062d38c301c0995ec6da980bdf5e48332 (diff)
more on this
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/handlers/basehandler.go17
-rw-r--r--internal/server/handlers/readcommand.go2
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 {