aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Ashby <martin@ashbysoft.com>2023-12-03 22:09:16 +0000
committerMartin Ashby <martin@ashbysoft.com>2023-12-03 22:09:16 +0000
commit4700fa924ab82ca2e41daa627a59f691d8177d5b (patch)
tree3f6998b9ee11656b46d298d94be222ed3c08252f
parentecfca750dff292d5083465a2ca5b6106649b92af (diff)
downloadaoc2023-4700fa924ab82ca2e41daa627a59f691d8177d5b.tar.gz
aoc2023-4700fa924ab82ca2e41daa627a59f691d8177d5b.tar.bz2
aoc2023-4700fa924ab82ca2e41daa627a59f691d8177d5b.tar.xz
aoc2023-4700fa924ab82ca2e41daa627a59f691d8177d5b.zip
Fix the annoying freeze on .free
It was caused by duplicating GeneralPurposeAllocator, by using it as a struct value. It has a mutex in it, so don't do that.
-rw-r--r--common.zig11
-rw-r--r--day1.zig4
-rw-r--r--day2.zig4
3 files changed, 9 insertions, 10 deletions
diff --git a/common.zig b/common.zig
index f724940..c38beb1 100644
--- a/common.zig
+++ b/common.zig
@@ -2,16 +2,13 @@ const std = @import("std");
pub const Setup = struct {
pub const Part = enum { pt1, pt2 };
-
- gpa: std.heap.GeneralPurposeAllocator(.{}),
a: std.mem.Allocator,
input: []const u8,
part: Part,
- pub fn get() !Setup {
+ pub fn get(a: std.mem.Allocator) !Setup {
var res: Setup = undefined;
- res.gpa = std.heap.GeneralPurposeAllocator(.{}){};
- res.a = res.gpa.allocator();
+ res.a = a;
var p = std.process.args();
var file: []const u8 = "";
if (!p.skip()) return error.NoProgramName;
@@ -39,8 +36,6 @@ pub const Setup = struct {
return res;
}
pub fn deinit(self: *Setup) void {
- _ = self;
- //self.a.free(self.input); // For some reason this is freezing
- //_ = self.gpa.deinit(); // and if we don't free, then gpa.deinit whinges that we leaked memory :)
+ self.a.free(self.input); // For some reason this is freezing
}
};
diff --git a/day1.zig b/day1.zig
index 5258b4e..5143fdc 100644
--- a/day1.zig
+++ b/day1.zig
@@ -49,7 +49,9 @@ const w2d = std.comptime_string_map.ComptimeStringMap(u8, .{
});
pub fn main() !void {
- var s = try Setup.get();
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ var s = try Setup.get(gpa.allocator());
defer s.deinit();
var l = std.mem.splitScalar(u8, s.input, '\n');
var t: u64 = 0;
diff --git a/day2.zig b/day2.zig
index 9ce71d9..c29bd0e 100644
--- a/day2.zig
+++ b/day2.zig
@@ -16,7 +16,9 @@ const Colour = enum {
};
pub fn main() !void {
- var setup = try Setup.get();
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ var setup = try Setup.get(gpa.allocator());
defer setup.deinit();
var sum: u32 = 0;
var lines = std.mem.splitScalar(u8, setup.input, '\n');