From 557e912d9a9914bd1962ef632d146f760f5ffa39 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Fri, 25 Aug 2023 04:00:54 -0700 Subject: Fix assertion failure with sourcemaps in multi-threaded transpiler (#4321) Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> --- src/bun.js/javascript.zig | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig index 96e954fa4..01f6383af 100644 --- a/src/bun.js/javascript.zig +++ b/src/bun.js/javascript.zig @@ -182,6 +182,27 @@ pub const SavedSourceMap = struct { pub const SourceMapHandler = js_printer.SourceMapHandler.For(SavedSourceMap, onSourceMapChunk); + pub fn deinit(this: *SavedSourceMap) void { + { + this.mutex.lock(); + var iter = this.map.valueIterator(); + while (iter.next()) |val| { + var value = Value.from(val.*); + if (value.get(ParsedSourceMap)) |source_map_| { + var source_map: *ParsedSourceMap = source_map_; + source_map.deinit(default_allocator); + } else if (value.get(SavedMappings)) |saved_mappings| { + var saved = SavedMappings{ .data = @as([*]u8, @ptrCast(saved_mappings)) }; + saved.deinit(); + } + } + + this.mutex.unlock(); + } + + this.map.deinit(); + } + pub fn putMappings(this: *SavedSourceMap, source: logger.Source, mappings: MutableString) !void { this.mutex.lock(); defer this.mutex.unlock(); @@ -979,7 +1000,7 @@ pub const VirtualMachine = struct { .flush_list = std.ArrayList(string).init(allocator), .blobs = null, .origin = bundler.options.origin, - .saved_source_map_table = SavedSourceMap.HashTable.init(allocator), + .saved_source_map_table = SavedSourceMap.HashTable.init(bun.default_allocator), .source_mappings = undefined, .macros = MacroMap.init(allocator), .macro_entry_points = @TypeOf(vm.macro_entry_points).init(allocator), @@ -1082,7 +1103,7 @@ pub const VirtualMachine = struct { .flush_list = std.ArrayList(string).init(allocator), .blobs = if (opts.args.serve orelse false) try Blob.Group.init(allocator) else null, .origin = bundler.options.origin, - .saved_source_map_table = SavedSourceMap.HashTable.init(allocator), + .saved_source_map_table = SavedSourceMap.HashTable.init(bun.default_allocator), .source_mappings = undefined, .macros = MacroMap.init(allocator), .macro_entry_points = @TypeOf(vm.macro_entry_points).init(allocator), @@ -1197,7 +1218,7 @@ pub const VirtualMachine = struct { .flush_list = std.ArrayList(string).init(allocator), .blobs = if (opts.args.serve orelse false) try Blob.Group.init(allocator) else null, .origin = bundler.options.origin, - .saved_source_map_table = SavedSourceMap.HashTable.init(allocator), + .saved_source_map_table = SavedSourceMap.HashTable.init(bun.default_allocator), .source_mappings = undefined, .macros = MacroMap.init(allocator), .macro_entry_points = @TypeOf(vm.macro_entry_points).init(allocator), @@ -1828,7 +1849,9 @@ pub const VirtualMachine = struct { } // TODO: - pub fn deinit(_: *VirtualMachine) void {} + pub fn deinit(this: *VirtualMachine) void { + this.source_mappings.deinit(); + } pub const ExceptionList = std.ArrayList(Api.JsException); -- cgit v1.2.3