From a877dee338d115f496f408ae21378b74cd7c8a48 Mon Sep 17 00:00:00 2001 From: Techatrix Date: Mon, 6 Jan 2025 10:16:07 +0100 Subject: [PATCH] fix various memory leaks --- src/DocumentStore.zig | 4 ++++ src/features/diagnostics.zig | 2 ++ src/main.zig | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/DocumentStore.zig b/src/DocumentStore.zig index 99cac72a4..7024823ef 100644 --- a/src/DocumentStore.zig +++ b/src/DocumentStore.zig @@ -552,12 +552,14 @@ pub const Handle = struct { var old_cimports = self.cimports; var old_document_scope = if (old_status.has_document_scope) self.impl.document_scope else null; var old_zir = if (old_status.has_zir) self.impl.zir else null; + var old_zoir = if (old_status.has_zoir) self.impl.zoir else null; self.tree = new_tree; self.import_uris = .empty; self.cimports = .empty; self.impl.document_scope = undefined; self.impl.zir = undefined; + self.impl.zoir = undefined; self.version += 1; @@ -574,6 +576,7 @@ pub const Handle = struct { if (old_document_scope) |*document_scope| document_scope.deinit(self.impl.allocator); if (old_zir) |*zir| zir.deinit(self.impl.allocator); + if (old_zoir) |*zoir| zoir.deinit(self.impl.allocator); } fn deinit(self: *Handle) void { @@ -585,6 +588,7 @@ pub const Handle = struct { const allocator = self.impl.allocator; if (status.has_zir) self.impl.zir.deinit(allocator); + if (status.has_zoir) self.impl.zoir.deinit(allocator); if (status.has_document_scope) self.impl.document_scope.deinit(allocator); allocator.free(self.tree.source); self.tree.deinit(allocator); diff --git a/src/features/diagnostics.zig b/src/features/diagnostics.zig index e8b9ecadc..716f9ac02 100644 --- a/src/features/diagnostics.zig +++ b/src/features/diagnostics.zig @@ -552,6 +552,8 @@ pub const BuildOnSave = struct { defer transport.deinit(); var diagnostic_tags: std.AutoArrayHashMapUnmanaged(DiagnosticsCollection.Tag, void) = .empty; + defer diagnostic_tags.deinit(self.allocator); + defer { for (diagnostic_tags.keys()) |tag| collection.clearErrorBundle(tag); collection.publishDiagnostics() catch {}; diff --git a/src/main.zig b/src/main.zig index 02be3e61d..f854f20a2 100644 --- a/src/main.zig +++ b/src/main.zig @@ -366,6 +366,10 @@ pub fn main() !u8 { log_transport = if (result.disable_lsp_logs) null else transport.any(); log_stderr = result.enable_stderr_logs; log_level = result.log_level orelse log_level; + defer { + log_transport = null; + log_stderr = true; + } log.info("Starting ZLS {s} @ '{s}'", .{ zls.build_options.version_string, result.zls_exe_path }); log.info("Log File: {?s} ({s})", .{ log_file_path, @tagName(log_level) });