fix: make sure project state is freed with the correct allocator
This commit is contained in:
parent
20129ea773
commit
c8840f0756
2 changed files with 7 additions and 4 deletions
|
|
@ -75,17 +75,18 @@ pub fn open(rel_project_directory: []const u8) (ProjectManagerError || FileSyste
|
||||||
const project_state_allocator = std.heap.c_allocator;
|
const project_state_allocator = std.heap.c_allocator;
|
||||||
var project_state_mutex: std.Thread.Mutex = .{};
|
var project_state_mutex: std.Thread.Mutex = .{};
|
||||||
var project_state: ProjectStateMap = .empty;
|
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 {
|
fn get_project_state(project_directory: []const u8) ?[]const u8 {
|
||||||
project_state_mutex.lock();
|
project_state_mutex.lock();
|
||||||
defer project_state_mutex.unlock();
|
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();
|
project_state_mutex.lock();
|
||||||
defer project_state_mutex.unlock();
|
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);
|
try project_state.put(project_state_allocator, try project_state_allocator.dupe(u8, project_directory), state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -403,7 +403,9 @@ const cmds = struct {
|
||||||
try self.write_state(&state_writer.writer);
|
try self.write_state(&state_writer.writer);
|
||||||
try state_writer.writer.flush();
|
try state_writer.writer.flush();
|
||||||
const old_project = tp.env.get().str("project");
|
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);
|
const project_state = try project_manager.open(project_dir);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue