From e65928fd09d88ec32971c9d1fa094f602ce54edb Mon Sep 17 00:00:00 2001 From: IntegratedQuantum Date: Mon, 27 Nov 2023 21:00:04 +0100 Subject: [PATCH] Make the log function work properly when logging in a defer that comes after the stackAllocator is freed. --- src/main.zig | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main.zig b/src/main.zig index 2e8e1dba4..cfb0dc6c3 100644 --- a/src/main.zig +++ b/src/main.zig @@ -178,14 +178,22 @@ pub const std_options = struct { }; fn logToFile(comptime format: []const u8, args: anytype) void { - const string = std.fmt.allocPrint(stackAllocator, format, args) catch return; - defer stackAllocator.free(string); + var stackFallbackAllocator: std.heap.StackFallbackAllocator(65536) = undefined; + stackFallbackAllocator.fallback_allocator = globalAllocator; + const allocator = stackFallbackAllocator.get(); + + const string = std.fmt.allocPrint(allocator, format, args) catch return; + defer allocator.free(string); logFile.writeAll(string) catch {}; } fn logToStdErr(comptime format: []const u8, args: anytype) void { - const string = std.fmt.allocPrint(stackAllocator, format, args) catch return; - defer stackAllocator.free(string); + var stackFallbackAllocator: std.heap.StackFallbackAllocator(65536) = undefined; + stackFallbackAllocator.fallback_allocator = globalAllocator; + const allocator = stackFallbackAllocator.get(); + + const string = std.fmt.allocPrint(allocator, format, args) catch return; + defer allocator.free(string); nosuspend std.io.getStdErr().writeAll(string) catch {}; }