commit f7f0b9d28f2d68f40fcfe79f85b4cc37ea9ba2e8 (tree)
parent 3bb2f7b84ed8b1ee09b6077f66e28ab7291a7bd4
Author: Matthew Lugg <mlugg@mlugg.co.uk>
Date: Fri, 2 Jan 2026 12:34:56 +0000
std.http.test: fix memory leaks on OOM
Diffstat:
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/lib/std/http/test.zig b/lib/std/http/test.zig
@@ -1139,13 +1139,26 @@ fn createTestServer(io: Io, S: type) !*TestServer {
}
const address = try net.IpAddress.parse("127.0.0.1", 0);
- const test_server = try std.testing.allocator.create(TestServer);
+
+ const gpa = std.testing.allocator;
+
+ const test_server = try gpa.create(TestServer);
+ errdefer gpa.destroy(test_server);
+
+ var net_server = try address.listen(io, .{ .reuse_address = true });
+ errdefer net_server.deinit(io);
+
+ // populate `test_server` first so `S.run` can use it
test_server.* = .{
.io = io,
- .net_server = try address.listen(io, .{ .reuse_address = true }),
+ .net_server = net_server,
.shutting_down = false,
- .server_thread = try std.Thread.spawn(.{}, S.run, .{test_server}),
+ .server_thread = undefined, // set below
};
+
+ test_server.server_thread = try .spawn(.{}, S.run, .{test_server});
+ errdefer comptime unreachable;
+
return test_server;
}