summaryrefslogtreecommitdiff
path: root/src/9p.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/9p.zig')
-rw-r--r--src/9p.zig19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/9p.zig b/src/9p.zig
index c0e7f61e..5ffe9058 100644
--- a/src/9p.zig
+++ b/src/9p.zig
@@ -52,9 +52,16 @@ pub const msize_min = cloud9.fs.msize_min;
/// The smallest msize a native listener offers (src/9p_io.zig).
pub const min_msize: u32 = 4096;
+/// What a native listener negotiates.
+pub const msize: u32 = 8192;
-/// The editor's engine: native fid count, native file names.
-pub const editor: cloud9.fs.Options = .{ .fid_capacity = max_fids, .name_capacity = 255 };
+/// The editor's engine: native fid count, native file names, and room to
+/// park a write of any size a frame can carry -- a request that would change
+/// a pane while the editor is out in a syscall waits in the engine
+/// (src/9p_io.zig, `serve`), and a write it cannot keep would fail instead.
+/// The largest write is msize less the Twrite header, 23 bytes (the test
+/// below asks a client), one byte more than `iohdrsz` allows for.
+pub const editor: cloud9.fs.Options = .{ .fid_capacity = max_fids, .name_capacity = 255, .park_data_max = msize - 23 };
/// The board's engine: the GPIO firmware's budget (src/esp32p4_9p.zig).
pub const board: cloud9.fs.Options = .{ .fid_capacity = board_fids, .name_capacity = board_name_capacity };
@@ -70,6 +77,14 @@ const Stub = struct {
pub const Reply = cloud9.fs.Reply;
};
+test "9p server: the editor's engine can park the largest write a client sends" {
+ var in: [4096]u8 = undefined;
+ var out: [4096]u8 = undefined;
+ var client: Client = .init(.{ .in = &in, .out = &out });
+ client.msize = msize;
+ try testing.expect(editor.park_data_max >= client.maxWrite());
+}
+
test "9p server: board and native capacities size the actual fid storage" {
const Board = Server(Stub, board);
const Native = Server(Stub, editor);