diff --git a/src/decomp.zig b/src/decomp.zig index 5968a5b..711f9d8 100644 --- a/src/decomp.zig +++ b/src/decomp.zig @@ -54,7 +54,7 @@ pub const DecompThread = struct { pub fn close(self: *DecompThread) void { if (self.status.raw == 0) return; while (self.status.raw == 2) Futex.wait(&self.status, 2); - &self.status.store(3, .release); + self.status.store(3, .release); Futex.wake(&self.status, 1); self.thr.join(); } @@ -148,6 +148,9 @@ pub fn init(alloc: std.mem.Allocator, comp_type: CompressionType, block_size: u3 } pub fn deinit(self: DecompMgr) void { + for (self.threads[self.to_start..]) |*t| { + t.close(); + } self.alloc.free(self.threads); } @@ -179,6 +182,8 @@ pub fn decompSlice(self: *DecompMgr, dat: []u8, res: []u8) !usize { return thr.submitData(dat, res); } pub fn decompReader(self: *DecompMgr, rdr: *Reader, res: []u8) !usize { + std.debug.print("HELLO\n", .{}); + defer std.debug.print("GOODBYE\n", .{}); self.mut.lock(); var thr: *DecompThread = undefined; var node = self.queue.popFirst(); diff --git a/src/util/metadata.zig b/src/util/metadata.zig index 1c8b7c8..e9b5801 100644 --- a/src/util/metadata.zig +++ b/src/util/metadata.zig @@ -7,8 +7,8 @@ const StreamError = std.Io.Reader.StreamError; const DecompMgr = @import("../decomp.zig"); const BlockHeader = packed struct { - uncompressed: bool, size: u15, + uncompressed: bool, }; const This = @This(); @@ -50,7 +50,8 @@ fn advance(self: *This) !void { self.interface.buffer = self.buf[0..hdr.size]; return; } - var limit_rdr = self.rdr.limited(@enumFromInt(hdr.size), &[0]u8{}); + var tmp_buf: [1024]u8 = undefined; + var limit_rdr = self.rdr.limited(@enumFromInt(hdr.size), &tmp_buf); self.interface.end = try self.decomp.decompReader(&limit_rdr.interface, &self.buf); self.interface.buffer = self.buf[0..self.interface.end]; }