diff options
Diffstat (limited to 'src/bundler.zig')
-rw-r--r-- | src/bundler.zig | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/bundler.zig b/src/bundler.zig index a43d6884c..c4b296d34 100644 --- a/src/bundler.zig +++ b/src/bundler.zig @@ -422,10 +422,9 @@ pub fn NewBundler(cache_files: bool) type { }; worker.data.shared_buffer = try MutableString.init(generator.allocator, 0); worker.data.scan_pass_result = js_parser.ScanPassResult.init(generator.allocator); - worker.data.log = generator.log.*; + worker.data.log = generator.log; defer { - generator.log.* = worker.data.log; worker.data.deinit(generator.allocator); } @@ -442,10 +441,6 @@ pub fn NewBundler(cache_files: bool) type { } for (this.workers[0..this.workers_used]) |*worker| { - worker.data.log.appendTo(generator.log) catch {}; - } - - for (this.workers[0..this.workers_used]) |*worker| { @atomicStore(bool, &worker.quit, true, .Release); } @@ -479,7 +474,7 @@ pub fn NewBundler(cache_files: bool) type { pub const WorkerData = struct { shared_buffer: MutableString = undefined, scan_pass_result: js_parser.ScanPassResult = undefined, - log: logger.Log, + log: *logger.Log, pub fn deinit(this: *WorkerData, allocator: *std.mem.Allocator) void { this.shared_buffer.deinit(); @@ -533,12 +528,19 @@ pub fn NewBundler(cache_files: bool) type { js_ast.Stmt.Data.Store.create(this.generator.allocator); this.data = this.generator.allocator.create(WorkerData) catch unreachable; this.data.* = WorkerData{ - .log = logger.Log.init(this.generator.allocator), + .log = this.generator.allocator.create(logger.Log) catch unreachable, }; + this.data.log.* = logger.Log.init(this.generator.allocator); this.data.shared_buffer = try MutableString.init(this.generator.allocator, 0); this.data.scan_pass_result = js_parser.ScanPassResult.init(this.generator.allocator); defer { + { + this.generator.log_lock.lock(); + this.data.log.appendTo(this.generator.log) catch {}; + this.generator.log_lock.unlock(); + } + this.data.deinit(this.generator.allocator); } @@ -557,7 +559,7 @@ pub fn NewBundler(cache_files: bool) type { }; }; write_lock: Lock, - + log_lock: Lock = Lock.init(), module_list: std.ArrayList(Api.JavascriptBundledModule), package_list: std.ArrayList(Api.JavascriptBundledPackage), header_string_buffer: MutableString, @@ -1085,7 +1087,7 @@ pub fn NewBundler(cache_files: bool) type { defer scan_pass_result.reset(); defer shared_buffer.reset(); defer this.bundler.resetStore(); - var log = &worker.data.log; + var log = worker.data.log; // If we're in a node_module, build that almost normally if (is_from_node_modules) { @@ -1585,6 +1587,7 @@ pub fn NewBundler(cache_files: bool) type { pub const BuildResolveResultPair = struct { written: usize, input_fd: ?StoredFileDescriptorType, + empty: bool = false, }; pub fn buildWithResolveResult( bundler: *ThisBundler, @@ -1700,7 +1703,7 @@ pub fn NewBundler(cache_files: bool) type { }; if (result.empty) { - return BuildResolveResultPair{ .written = 0, .input_fd = result.input_fd }; + return BuildResolveResultPair{ .written = 0, .input_fd = result.input_fd, .empty = true }; } try bundler.linker.link(file_path, &result, import_path_format, false); |