From 9130e08e92719da433fbfa148e275c3d066952ca Mon Sep 17 00:00:00 2001 From: Amr Gharbeia Date: Wed, 6 May 2026 10:25:11 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20TUI=20reader-loop=20=E2=80=94=20silent?= =?UTF-8?q?=20timeout=20handling,=20sleep=20on=20idle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - recv-daemon: catch all errors silently (not just usocket:timeout-error which doesn't match SBCL's SB-INT:IO-TIMEOUT). Prevents log-message from bleeding through to the Croatoan screen. - reader-loop: add (sleep 0.5) when recv-daemon returns nil, preventing tight spin on repeated I/O timeouts during idle periods. --- lisp/gateway-tui-main.lisp | 14 ++++++++------ org/gateway-tui-main.org | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/lisp/gateway-tui-main.lisp b/lisp/gateway-tui-main.lisp index 117ff03..2ab33a4 100644 --- a/lisp/gateway-tui-main.lisp +++ b/lisp/gateway-tui-main.lisp @@ -176,23 +176,25 @@ (let* ((hdr (make-string 6)) (n 0)) (loop while (< n 6) do (let ((ch (read-char s nil))) - (unless ch (return-from recv-daemon nil)) - (setf (char hdr n) ch) (incf n))) + (unless ch (return-from recv-daemon nil)) + (setf (char hdr n) ch) (incf n))) (let* ((len (parse-integer hdr :radix 16 :junk-allowed t)) (buf (make-string (or len 0)))) (when (and len (> len 0)) (loop for i from 0 below len do (let ((ch (read-char s nil))) - (unless ch (return-from recv-daemon nil)) - (setf (char buf i) ch))) + (unless ch (return-from recv-daemon nil)) + (setf (char buf i) ch))) (let ((*read-eval* nil)) (read-from-string buf))))) - (error (c) (log-message "TUI-RECV: ~a" c) nil))) + (error () nil))) (defun reader-loop (s) (loop while (and (st :running) (open-stream-p s)) do (let ((msg (recv-daemon s))) - (when msg (queue-event (list :type :daemon :payload msg)))))) + (if msg + (queue-event (list :type :daemon :payload msg)) + (sleep 0.5))))) (defun connect-daemon (&optional (host "127.0.0.1") (port 9105)) (handler-case diff --git a/org/gateway-tui-main.org b/org/gateway-tui-main.org index 51a3c5a..8e722be 100644 --- a/org/gateway-tui-main.org +++ b/org/gateway-tui-main.org @@ -207,23 +207,25 @@ Event handlers + daemon I/O + main loop. (let* ((hdr (make-string 6)) (n 0)) (loop while (< n 6) do (let ((ch (read-char s nil))) - (unless ch (return-from recv-daemon nil)) - (setf (char hdr n) ch) (incf n))) + (unless ch (return-from recv-daemon nil)) + (setf (char hdr n) ch) (incf n))) (let* ((len (parse-integer hdr :radix 16 :junk-allowed t)) (buf (make-string (or len 0)))) (when (and len (> len 0)) (loop for i from 0 below len do (let ((ch (read-char s nil))) - (unless ch (return-from recv-daemon nil)) - (setf (char buf i) ch))) + (unless ch (return-from recv-daemon nil)) + (setf (char buf i) ch))) (let ((*read-eval* nil)) (read-from-string buf))))) - (error (c) (log-message "TUI-RECV: ~a" c) nil))) + (error () nil))) (defun reader-loop (s) (loop while (and (st :running) (open-stream-p s)) do (let ((msg (recv-daemon s))) - (when msg (queue-event (list :type :daemon :payload msg)))))) + (if msg + (queue-event (list :type :daemon :payload msg)) + (sleep 0.5))))) #+end_src ** Connection