diff --git a/src/image.zig b/src/image.zig index 51c1eef..46acb24 100644 --- a/src/image.zig +++ b/src/image.zig @@ -179,17 +179,20 @@ pub const Image = struct { } pub fn close(self: *Image) void { - self.allocator.free(self.path); - self.allocator.free(self.curpath); - var st: i32 = c.sf_close(self.sndfile); - if (st != 0) { std.debug.warn("Failed to close {} ({})\n", .{ self.path, c.sf_error_number(st), }); } + + self.allocator.free(self.path); + self.allocator.free(self.curpath); + + var allocator = self.allocator; + self.* = undefined; + allocator.destroy(self); } pub fn read(self: *Image, file_chans: c_int, buf: []f32) bool { diff --git a/src/main.zig b/src/main.zig index 962684b..8ea264d 100644 --- a/src/main.zig +++ b/src/main.zig @@ -231,7 +231,12 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: anytype) !void { } pub fn main() !void { - const allocator = std.heap.page_allocator; + // const allocator = std.heap.page_allocator; + var allocator_instance = std.heap.GeneralPurposeAllocator(.{}){}; + defer { + _ = allocator_instance.deinit(); + } + const allocator = &allocator_instance.allocator; var lang = langs.Lang.init(allocator); defer lang.deinit(); diff --git a/src/runner.zig b/src/runner.zig index 47f2cab..442068d 100644 --- a/src/runner.zig +++ b/src/runner.zig @@ -108,6 +108,7 @@ pub const Runner = struct { // we don't copy load_path into a temporary file because we're already // loading it under the SFM_READ mode, which won't cause any destructive // operations on the file. + if (self.image) |image| image.close(); self.image = try Image.open(self.allocator, load_path); }