summaryrefslogtreecommitdiff
path: root/src/detached/server.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-28 13:35:24 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:14 -0300
commit77c7d0bae3b69dc6fccc7cfea7d30aabc1543409 (patch)
tree77407ede333bd86494d426a62818d749a46c90d4 /src/detached/server.zig
parent238e35e89d387f3c266b40f107e9419ea75d77bb (diff)
downloadpardes-77c7d0bae3b69dc6fccc7cfea7d30aabc1543409.tar.gz
pardes-77c7d0bae3b69dc6fccc7cfea7d30aabc1543409.zip
With no frontend attached, a detached session's messages go after MessageLinger
A message lingers until input dismisses it, and a detached session with nobody attached has no input: its messages, and /screen, kept what was said long ago. The session now marks the core unattended while no client is attached, and the core drops a pane's messages once the newest has been up MessageLinger on the clock, checked as it is stepped or served. A pane's older lines go with its newest rather than each on its own clock; the render pipeline's clock is the place for that. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/detached/server.zig')
-rw-r--r--src/detached/server.zig2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/detached/server.zig b/src/detached/server.zig
index b088d833..6a4b5001 100644
--- a/src/detached/server.zig
+++ b/src/detached/server.zig
@@ -770,6 +770,8 @@ pub const Session = struct {
const completed = s.ninep_wake.swap(false, .acq_rel) or drained;
for (&s.clients) |*c| if (c.fd >= 0) s.flush(c);
const regridded = s.reconcile();
+ // Nobody attached, nobody to dismiss a message (expireUnattended).
+ s.core.unattended = s.primary() == null;
const now = monotonicMs();
var fds: [poll_slots]libc.pollfd = undefined;