diff options
author | 2023-08-25 04:00:54 -0700 | |
---|---|---|
committer | 2023-08-25 04:00:54 -0700 | |
commit | 557e912d9a9914bd1962ef632d146f760f5ffa39 (patch) | |
tree | d073cf71571d235631afbc2c370294c1bf17eacc | |
parent | 1e75a978e5bb378f16277854cba0de449e59f82c (diff) | |
download | bun-557e912d9a9914bd1962ef632d146f760f5ffa39.tar.gz bun-557e912d9a9914bd1962ef632d146f760f5ffa39.tar.zst bun-557e912d9a9914bd1962ef632d146f760f5ffa39.zip |
Fix assertion failure with sourcemaps in multi-threaded transpiler (#4321)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
-rw-r--r-- | src/bun.js/javascript.zig | 31 |
1 files 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); |