aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-16 02:41:47 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-16 02:41:47 -0800
commitaed6f89772d0d07ac0c4d5b8cb5324d5dc7246b4 (patch)
tree560bdae6ec8844e01cdfb77d6a60bb115ce75168
parent39af1ccc7c677a70a1715ecef562b7cda31a7857 (diff)
downloadbun-aed6f89772d0d07ac0c4d5b8cb5324d5dc7246b4.tar.gz
bun-aed6f89772d0d07ac0c4d5b8cb5324d5dc7246b4.tar.zst
bun-aed6f89772d0d07ac0c4d5b8cb5324d5dc7246b4.zip
[bun bun] Fix a race condition introduced in #55ff681976f7bae5a428c409061991c07fa492e7
-rw-r--r--src/bundler.zig11
-rw-r--r--src/resolver/resolver.zig2
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,