summaryrefslogtreecommitdiff
path: root/src/server/client.zig
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2026-01-01 21:41:53 +0000
committerRobby Zambito <contact@robbyzambito.me>2026-01-01 22:14:36 +0000
commita3e026ebf1434279bae431aa463a2690b471a4c2 (patch)
tree427ff2ac3a12d01314652f03b53861aa3ccf1c31 /src/server/client.zig
parentfc68749669a3bd9e0530d5958b100262537f142a (diff)
Cleanup for deinitializing
Diffstat (limited to 'src/server/client.zig')
-rw-r--r--src/server/client.zig16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/server/client.zig b/src/server/client.zig
index 5c8d0cd..ff7e5c1 100644
--- a/src/server/client.zig
+++ b/src/server/client.zig
@@ -29,7 +29,20 @@ pub fn start(self: *Client, io: std.Io, alloc: std.mem.Allocator, queue: *std.Io
while (true) {
const len = try queue.get(io, &msgs, 1);
std.debug.assert(len <= msgs.len);
- for (msgs[0..len]) |msg| {
+ for (0..len) |i| {
+ const msg = msgs[i];
+ defer switch (msg) {
+ .msg => |m| m.deinit(alloc),
+ else => {},
+ };
+ errdefer {
+ for (msgs[i + 1 .. len]) |mg| switch (mg) {
+ .msg => |m| {
+ m.deinit(alloc);
+ },
+ else => {},
+ };
+ }
switch (msg) {
.@"+ok" => {
_ = try self.to_client.write("+OK\r\n");
@@ -43,7 +56,6 @@ pub fn start(self: *Client, io: std.Io, alloc: std.mem.Allocator, queue: *std.Io
_ = try self.to_client.write("\r\n");
},
.msg => |m| {
- defer m.deinit(alloc);
try self.to_client.print(
"MSG {s} {s} {s} {d}\r\n{s}\r\n",
.{