From bcaac146d2516bb75c2ea78b26e03b12c7c7f61e Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Thu, 13 Aug 2026 20:59:05 +0200 Subject: [PATCH] server: on BlockOnce timeout, fall back to non-blocking Read MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Frontends rely on getting the current state on timeout (heartbeat). When BlockOnce returns empty (5s timeout), the server now calls the plain Read handler as fallback. Files without a Read handler (like feed) return nothing — consumer unaffected. --- cmd/olliesrv/server.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmd/olliesrv/server.go b/cmd/olliesrv/server.go index d5183f9..4a55dec 100644 --- a/cmd/olliesrv/server.go +++ b/cmd/olliesrv/server.go @@ -500,6 +500,10 @@ func read(root *fs.Tree, cs *connState, fc *plan9.Fcall, ctx context.Context) *p if err != nil { return errFcall(fc, err.Error()) } + if len(content) == 0 { + // Timeout: fall back to non-blocking Read for current value. + content, _ = entry.Read() + } if nextBase != "" { cs.mu.Lock() if f, ok := cs.fids[fc.Fid]; ok {