diff options
author | 2021-12-16 02:41:47 -0800 | |
---|---|---|
committer | 2021-12-16 02:41:47 -0800 | |
commit | aed6f89772d0d07ac0c4d5b8cb5324d5dc7246b4 (patch) | |
tree | 560bdae6ec8844e01cdfb77d6a60bb115ce75168 | |
parent | 39af1ccc7c677a70a1715ecef562b7cda31a7857 (diff) | |
download | bun-aed6f89772d0d07ac0c4d5b8cb5324d5dc7246b4.tar.gz bun-aed6f89772d0d07ac0c4d5b8cb5324d5dc7246b4.tar.zst bun-aed6f89772d0d07ac0c4d5b8cb5324d5dc7246b4.zip |
[bun bun] Fix a race condition introduced in #55ff681976f7bae5a428c409061991c07fa492e7
-rw-r--r-- | src/bundler.zig | 11 | ||||
-rw-r--r-- | src/resolver/resolver.zig | 2 |
2 files changed, 9 insertions, 4 deletions
diff --git a/src/bundler.zig b/src/bundler.zig index 578e966e9..b73dfbb78 100644 --- a/src/bundler.zig +++ b/src/bundler.zig @@ -482,7 +482,7 @@ pub const Bundler = struct { } while (generator.queue.next()) |item| { - try generator.processFile(worker, item); + try generator.processFile(worker, generator.bundler, item); } generator.estimated_input_lines_of_code = worker.data.estimated_input_lines_of_code; @@ -593,6 +593,9 @@ pub const Bundler = struct { 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); + var bundler = this.generator.bundler.*; + var bundler_ptr = &bundler; + bundler_ptr.linker.resolver = &bundler_ptr.resolver; defer { { @@ -613,7 +616,7 @@ pub const Bundler = struct { _ = this.generator.pool.completed_count.fetchAdd(1, .Release); } - try this.generator.processFile(this, item); + try this.generator.processFile(this, bundler_ptr, item); } } } @@ -1441,7 +1444,7 @@ pub const Bundler = struct { threadlocal var json_e_call: js_ast.E.Call = undefined; threadlocal var json_e_identifier: js_ast.E.Identifier = undefined; threadlocal var json_call_args: [1]js_ast.Expr = undefined; - pub fn processFile(this: *GenerateNodeModuleBundle, worker: *ThreadPool.Worker, _resolve: _resolver.Result) !void { + pub fn processFile(this: *GenerateNodeModuleBundle, worker: *ThreadPool.Worker, bundler: *Bundler, _resolve: _resolver.Result) !void { const resolve = _resolve; if (resolve.is_external) return; @@ -1457,7 +1460,7 @@ pub const Bundler = struct { var file_path = (resolve.pathConst() orelse unreachable).*; const source_dir = file_path.sourceDir(); const loader = this.bundler.options.loader(file_path.name.ext); - var bundler = this.bundler; + defer scan_pass_result.reset(); defer shared_buffer.reset(); defer this.bundler.resetStore(); diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig index 1b6e049f4..4a3fffb8a 100644 --- a/src/resolver/resolver.zig +++ b/src/resolver/resolver.zig @@ -591,6 +591,8 @@ pub const Resolver = struct { } pub fn resolve(r: *ThisResolver, source_dir: string, import_path: string, kind: ast.ImportKind) !Result { + const original_order = r.extension_order; + defer r.extension_order = original_order; r.extension_order = switch (kind) { .url, .at_conditional, .at => std.mem.span(&options.BundleOptions.Defaults.CSSExtensionOrder), .entry_point, .stmt, .dynamic => r.opts.esm_extension_order, |