summaryrefslogtreecommitdiff
path: root/src/panes.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-27 20:14:04 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:14 -0300
commitacd9e032a147f4aa7ad49110dc2f4fb945e7a9bb (patch)
tree6b81d7ac0b759472bd5c1afb1fc15cd6c930ac79 /src/panes.zig
parent28c814aa5cfea23e8950ef007916ffc5d089288d (diff)
downloadpardes-acd9e032a147f4aa7ad49110dc2f4fb945e7a9bb.tar.gz
pardes-acd9e032a147f4aa7ad49110dc2f4fb945e7a9bb.zip
Keep a pane's filesystem state on the Pane instead of a slot-indexed table
addr, limit, the event queue and its readers, pty/data's queue, a waiting run and the /log announcement flag lived in p.fs.panes[slot], reset when the pane went; a reused slot is how the bug class came in. acme keeps the same state on its Window (editors/acme/dat.h:226-266), so now Pane.fs holds it: announced, retired (noteRetire, which still answers a waiting run and drops the listener count first) and freed with the pane itself. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/panes.zig')
-rw-r--r--src/panes.zig5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/panes.zig b/src/panes.zig
index 68e03a04..08310830 100644
--- a/src/panes.zig
+++ b/src/panes.zig
@@ -103,6 +103,11 @@ pub const Pane = struct {
terminal: ?*Terminal.State = null,
gpa: std.mem.Allocator,
serial: u32 = 0,
+ /// What the control filesystem keeps of this pane -- addr and limit, the
+ /// event queue and its readers, a run waiting on the shell -- lives and
+ /// dies with it, as acme keeps the same on its Window
+ /// (editors/acme/dat.h:226-266).
+ fs: pardes.ctlfs.pane.State = .{},
mode: Mode = .normal,
vweight: f32 = 1,
/// A folded pane keeps its expansion weight, but occupies only its tag row.