summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/macos.zig14
-rw-r--r--src/main.zig5
2 files changed, 18 insertions, 1 deletions
diff --git a/src/macos.zig b/src/macos.zig
index 3ff8bdfa..b19c5996 100644
--- a/src/macos.zig
+++ b/src/macos.zig
@@ -692,8 +692,15 @@ export fn pardes_init(runtime: ?*const Runtime, cols_arg: u16, rows_arg: u16) c_
return 0;
}
+/// The shell's gpa in a Debug build, as std.start's is for the others.
+var debug_gpa: std.heap.DebugAllocator(.{}) = .init;
+
fn initCore(runtime: ?*const Runtime, cols_arg: u16, rows_arg: u16) !void {
- const gpa = std.heap.smp_allocator;
+ // The allocator every other shell gets from std.start: a DebugAllocator
+ // in Debug, libc's malloc otherwise. libc's measured at least as fast as
+ // std.heap.smp_allocator everywhere and faster on MuPDF's page-sized
+ // rasters, so this shell no longer differs.
+ const gpa = if (builtin.mode == .Debug) debug_gpa.allocator() else std.heap.c_allocator;
const allocs = pardes.memory.init(gpa);
errdefer pardes.memory.deinit();
@@ -824,6 +831,11 @@ export fn pardes_deinit() void {
st.threaded.deinit();
st.gpa.destroy(st.threaded);
pardes.memory.deinit();
+ // Leaks are logged and do not fail, as std.start treats the others'.
+ if (builtin.mode == .Debug) {
+ _ = debug_gpa.deinit();
+ debug_gpa = .init;
+ }
state = null;
}
diff --git a/src/main.zig b/src/main.zig
index 050cee60..86c302fe 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -138,6 +138,11 @@ fn webMain() !void {
try @import("gui/gui.zig").run(.{}, .{}, null);
}
+// init.gpa, what the tty, gui and detached shells allocate from, is
+// std.start's: a DebugAllocator in Debug and, since we link libc, libc's
+// malloc otherwise. Kept on purpose: glibc's malloc was measured at least as
+// fast as std.heap.smp_allocator on every scenario and faster on MuPDF's
+// page-sized rasters. macos.zig makes the same choice for itself.
fn nativeMain(init: std.process.Init) !void {
var stderr_probe: [64]u8 = undefined;
_ = std.debug.lockStderr(&stderr_probe);