aboutsummaryrefslogtreecommitdiff
path: root/lib/compiler/std-docs.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-03-06 18:00:34 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-03-10 17:51:06 -0700
commit574b33e65a6968928d359bc553c4e0c38312a3e9 (patch)
tree62ccc4547c603516aac30371ac3f26dd5898caff /lib/compiler/std-docs.zig
parentc7c7ad1b78fc8f79b5a0ddebdd374630f272be9a (diff)
downloadzig-574b33e65a6968928d359bc553c4e0c38312a3e9.tar.gz
zig-574b33e65a6968928d359bc553c4e0c38312a3e9.zip
zig std: use threads for the http server
Diffstat (limited to 'lib/compiler/std-docs.zig')
-rw-r--r--lib/compiler/std-docs.zig44
1 files changed, 26 insertions, 18 deletions
diff --git a/lib/compiler/std-docs.zig b/lib/compiler/std-docs.zig
index e398d4c2ad..f1d0f87add 100644
--- a/lib/compiler/std-docs.zig
+++ b/lib/compiler/std-docs.zig
@@ -36,25 +36,33 @@ pub fn main() !void {
.zig_lib_directory = zig_lib_directory,
};
- var read_buffer: [8000]u8 = undefined;
- accept: while (true) {
+ while (true) {
const connection = try http_server.accept();
- defer connection.stream.close();
-
- var server = std.http.Server.init(connection, &read_buffer);
- while (server.state == .ready) {
- var request = server.receiveHead() catch |err| switch (err) {
- error.HttpConnectionClosing => continue :accept,
- else => {
- std.log.err("closing http connection: {s}", .{@errorName(err)});
- continue :accept;
- },
- };
- serveRequest(&request, &context) catch |err| {
- std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) });
- continue :accept;
- };
- }
+ _ = std.Thread.spawn(.{}, accept, .{ &context, connection }) catch |err| {
+ std.log.err("unable to accept connection: {s}", .{@errorName(err)});
+ connection.stream.close();
+ continue;
+ };
+ }
+}
+
+fn accept(context: *Context, connection: std.net.Server.Connection) void {
+ defer connection.stream.close();
+
+ var read_buffer: [8000]u8 = undefined;
+ var server = std.http.Server.init(connection, &read_buffer);
+ while (server.state == .ready) {
+ var request = server.receiveHead() catch |err| switch (err) {
+ error.HttpConnectionClosing => return,
+ else => {
+ std.log.err("closing http connection: {s}", .{@errorName(err)});
+ return;
+ },
+ };
+ serveRequest(&request, context) catch |err| {
+ std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) });
+ return;
+ };
}
}