diff options
Diffstat (limited to 'src/server/client.zig')
| -rw-r--r-- | src/server/client.zig | 16 |
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", .{ |
