Memory lifetime fixes (#861)
* fix memory lifetime issues * more memory lifetime issue fixes
This commit is contained in:
parent
faee213658
commit
ebe3ba1471
@ -146,12 +146,11 @@ pub fn openDocument(self: *DocumentStore, uri: Uri, text: []const u8) error{OutO
|
|||||||
return handle.*;
|
return handle.*;
|
||||||
}
|
}
|
||||||
|
|
||||||
const duped_text = try self.allocator.dupeZ(u8, text);
|
|
||||||
errdefer self.allocator.free(duped_text);
|
|
||||||
|
|
||||||
var handle = try self.allocator.create(Handle);
|
var handle = try self.allocator.create(Handle);
|
||||||
errdefer self.allocator.destroy(handle);
|
errdefer self.allocator.destroy(handle);
|
||||||
|
|
||||||
|
const duped_text = try self.allocator.dupeZ(u8, text);
|
||||||
|
|
||||||
handle.* = try self.createDocument(uri, duped_text, true);
|
handle.* = try self.createDocument(uri, duped_text, true);
|
||||||
errdefer handle.deinit(self.allocator);
|
errdefer handle.deinit(self.allocator);
|
||||||
|
|
||||||
@ -580,7 +579,9 @@ fn uriInImports(
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// consider it checked even if a failure happens
|
// consider it checked even if a failure happens
|
||||||
try checked_uris.put(try self.allocator.dupe(u8, source_uri), {});
|
|
||||||
|
const duped_uri = try self.allocator.dupe(u8, source_uri);
|
||||||
|
checked_uris.put(duped_uri, {}) catch self.allocator.free(duped_uri);
|
||||||
|
|
||||||
const handle = self.getOrLoadHandle(source_uri) orelse return false;
|
const handle = self.getOrLoadHandle(source_uri) orelse return false;
|
||||||
|
|
||||||
@ -638,11 +639,16 @@ fn createDocument(self: *DocumentStore, uri: Uri, text: [:0]u8, open: bool) erro
|
|||||||
// TODO: Better logic for detecting std or subdirectories?
|
// TODO: Better logic for detecting std or subdirectories?
|
||||||
const in_std = std.mem.indexOf(u8, uri, "/std/") != null;
|
const in_std = std.mem.indexOf(u8, uri, "/std/") != null;
|
||||||
if (self.config.zig_exe_path != null and std.mem.endsWith(u8, uri, "/build.zig") and !in_std) {
|
if (self.config.zig_exe_path != null and std.mem.endsWith(u8, uri, "/build.zig") and !in_std) {
|
||||||
errdefer |err| log.debug("Failed to load build file {s}: (error: {})", .{ uri, err });
|
const gop = try self.build_files.getOrPut(self.allocator, uri);
|
||||||
|
errdefer |err| {
|
||||||
|
self.build_files.swapRemoveAt(gop.index);
|
||||||
|
log.debug("Failed to load build file {s}: (error: {})", .{ uri, err });
|
||||||
|
}
|
||||||
|
if(!gop.found_existing) {
|
||||||
const duped_uri = try self.allocator.dupe(u8, uri);
|
const duped_uri = try self.allocator.dupe(u8, uri);
|
||||||
var build_file = try self.createBuildFile(duped_uri);
|
gop.value_ptr.* = try self.createBuildFile(duped_uri);
|
||||||
errdefer build_file.deinit(self.allocator);
|
gop.key_ptr.* = gop.value_ptr.uri;
|
||||||
try self.build_files.putNoClobber(self.allocator, build_file.uri, build_file);
|
}
|
||||||
handle.is_build_file = true;
|
handle.is_build_file = true;
|
||||||
} else if (self.config.zig_exe_path != null and !std.mem.endsWith(u8, uri, "/builtin.zig") and !in_std) blk: {
|
} else if (self.config.zig_exe_path != null and !std.mem.endsWith(u8, uri, "/builtin.zig") and !in_std) blk: {
|
||||||
log.debug("Going to walk down the tree towards: {s}", .{uri});
|
log.debug("Going to walk down the tree towards: {s}", .{uri});
|
||||||
|
Loading…
Reference in New Issue
Block a user