From 26cb33cad9cd7ccd8a53725782d5064f9fcd05f4 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Sat, 27 Sep 2025 21:55:31 +0200 Subject: [PATCH] fix: tracing using zig-0.15 Writer and add a trace file write lock --- src/main.zig | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main.zig b/src/main.zig index bdd53ef..60730e5 100644 --- a/src/main.zig +++ b/src/main.zig @@ -419,11 +419,18 @@ fn trace_json(json: thespian.message.json_string_view) callconv(.c) void { } extern fn ___tracy_emit_message(txt: [*]const u8, size: usize, callstack: c_int) void; +var trace_mutex: std.Thread.Mutex = .{}; + fn trace_to_file(m: thespian.message.c_buffer_type) callconv(.c) void { + trace_mutex.lock(); + defer trace_mutex.unlock(); + const State = struct { file: std.fs.File, + file_writer: std.fs.File.Writer, last_time: i64, var state: ?@This() = null; + var trace_buffer: [4096]u8 = undefined; fn write_tdiff(writer: anytype, tdiff: i64) !void { const msi = @divFloor(tdiff, std.time.us_per_ms); @@ -445,13 +452,12 @@ fn trace_to_file(m: thespian.message.c_buffer_type) callconv(.c) void { const file = std.fs.createFileAbsolute(path.written(), .{ .truncate = true }) catch return; State.state = .{ .file = file, + .file_writer = file.writer(&State.trace_buffer), .last_time = std.time.microTimestamp(), }; break :init State.state.?; }); - var buffer: [4096]u8 = undefined; - var file_writer = state.file.writer(&buffer); - const writer = &file_writer.interface; + const writer = &state.file_writer.interface; const ts = std.time.microTimestamp(); State.write_tdiff(writer, ts - state.last_time) catch {};