From c8840f07569d0fff1a081911990bb3692d365653 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Wed, 26 Nov 2025 15:55:47 +0100 Subject: [PATCH] fix: make sure project state is freed with the correct allocator --- src/project_manager.zig | 7 ++++--- src/tui/mainview.zig | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/project_manager.zig b/src/project_manager.zig index e302cce..48111ed 100644 --- a/src/project_manager.zig +++ b/src/project_manager.zig @@ -75,17 +75,18 @@ pub fn open(rel_project_directory: []const u8) (ProjectManagerError || FileSyste const project_state_allocator = std.heap.c_allocator; var project_state_mutex: std.Thread.Mutex = .{}; var project_state: ProjectStateMap = .empty; -const ProjectStateMap = std.StringHashMapUnmanaged([]const u8); +const ProjectStateMap = std.StringHashMapUnmanaged(std.array_list.Managed(u8)); fn get_project_state(project_directory: []const u8) ?[]const u8 { project_state_mutex.lock(); defer project_state_mutex.unlock(); - return project_state.get(project_directory); + return if (project_state.get(project_directory)) |state| state.items else null; } -pub fn store_state(project_directory: []const u8, state: []const u8) error{OutOfMemory}!void { +pub fn store_state(project_directory: []const u8, state: std.array_list.Managed(u8)) error{OutOfMemory}!void { project_state_mutex.lock(); defer project_state_mutex.unlock(); + if (project_state.fetchRemove(project_directory)) |old_state| old_state.value.deinit(); try project_state.put(project_state_allocator, try project_state_allocator.dupe(u8, project_directory), state); } diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index 67e9d8e..c8579dd 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -403,7 +403,9 @@ const cmds = struct { try self.write_state(&state_writer.writer); try state_writer.writer.flush(); const old_project = tp.env.get().str("project"); - try project_manager.store_state(old_project, try state_writer.toOwnedSlice()); + var state_al = state_writer.toArrayList(); + const state = state_al.toManaged(self.allocator); + try project_manager.store_state(old_project, state); } const project_state = try project_manager.open(project_dir);