From c2834f8254616f5bd2a1a5007ea0b240c6fcefac Mon Sep 17 00:00:00 2001 From: Luna Date: Tue, 18 Aug 2020 21:00:07 -0300 Subject: [PATCH 1/2] properly free Image contents --- src/image.zig | 11 +++++++---- src/runner.zig | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) 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/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); } From 7097334201a80fd6cd579ef7991dd7d5437a8575 Mon Sep 17 00:00:00 2001 From: Luna Date: Tue, 18 Aug 2020 21:00:16 -0300 Subject: [PATCH 2/2] turn on gpa --- src/main.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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();