Zig crash - interfaces
I am learning Zig a little bit and I encountered this interesting case: fn handleConnection(conn: std.Io.net.Stream, io: std.Io) !void { var buffer: [1024]u8 = .{0} ** 1024; var inBuf: [1024]u8 = .{0} ** 1024; const reader = conn.reader(io, &inBuf); var writer = conn.writer(io, &buffer); var ri = reader.interface; var http_server = std.http.Server.init(&ri, &writer.interface); // TODO: read a protobuf message (: var req = try http_server.receiveHead(); defer _ = conn.shutdown(io, std.Io.net.ShutdownHow.both) catch {}; try req.respond("hello world\n", std.http.Server.Request.RespondOptions{}); } Why this crashes? The crash message looks like: Segmentation fault at address 0x328 /home/gstatkevicius/Downloads/zig-x86_64-linux-0.16.0/lib/std/Io/net.zig:1305:40: 0x11f6b84 in readVec (std.zig) const n = io.vtable.netRead(io.userdata, r.stream.socket.handle, dest) catch |err| { ^ /home/gstatkevicius/Downloads/zig-x86_64-linux-0.16.0/lib/std/Io/Reader.zig:1135:29: 0x107df7b in fillMore (std.zig) _ = try r.vtable.readVec(r, &bufs); ^ /home/gstatkevicius/Downloads/zig-x86_64-linux-0.16.0/lib/std/http.zig:398:28: 0x11f171d in receiveHead (std.zig) in.fillMore() catch |err| switch (err) { ^ /home/gstatkevicius/Downloads/zig-x86_64-linux-0.16.0/lib/std/http/Server.zig:47:49: 0x11efaca in receiveHead (std.zig) const head_buffer = try s.reader.receiveHead(); ^ /home/gstatkevicius/dev/zetrics/src/main.zig:52:42: 0x11d754e in handleConnection (main.zig) var req = try http_server.receiveHead(); ^ /home/gstatkevicius/dev/zetrics/src/main.zig:38:29: 0x11d7e51 in main (main.zig) try handleConnection(try server.accept(io), io); ^ /home/gstatkevicius/Downloads/zig-x86_64-linux-0.16.0/lib/std/start.zig:737:30: 0x11d8a5e in callMain (std.zig) return wrapMain(root.main(.{ ^ /home/gstatkevicius/Downloads/zig-x86_64-linux-0.16.0/lib/std/start.zig:190:5: 0x11d7201 in _start (std.zig) asm volatile (switch (native_arch) { ^ fish: Job 1, 'zig run src/main.zig' terminated by signal SIGABRT (Abort) This version doesn’t crash: ...