diff options
author | 2022-02-16 04:01:13 -0800 | |
---|---|---|
committer | 2022-02-16 04:01:13 -0800 | |
commit | 5a80a2e216ded1d37c18ff54d9d3fa44e1bacc77 (patch) | |
tree | fb4c78c3ea1a251e8ce953bbe6335b2cea5fc5bc | |
parent | 3ab56cee8abe6a28eba3af64308762cf2349e8bc (diff) | |
download | bun-5a80a2e216ded1d37c18ff54d9d3fa44e1bacc77.tar.gz bun-5a80a2e216ded1d37c18ff54d9d3fa44e1bacc77.tar.zst bun-5a80a2e216ded1d37c18ff54d9d3fa44e1bacc77.zip |
[bun.js] Fix segfault when running many bun.js instances
-rw-r--r-- | src/javascript/jsc/base.zig | 11 | ||||
-rw-r--r-- | src/js_parser/js_parser.zig | 2 |
2 files changed, 9 insertions, 4 deletions
diff --git a/src/javascript/jsc/base.zig b/src/javascript/jsc/base.zig index b77baa550..141810ea4 100644 --- a/src/javascript/jsc/base.zig +++ b/src/javascript/jsc/base.zig @@ -872,8 +872,9 @@ pub fn NewClass( var property_name_refs_set: bool = false; const property_name_literals = property_names; - pub var ref: js.JSClassRef = null; - pub var loaded = false; + pub threadlocal var ref: js.JSClassRef = null; + pub threadlocal var loaded = false; + pub var defined: bool = false; pub var definition: js.JSClassDefinition = .{ .version = 0, .attributes = js.JSClassAttributes.kJSClassAttributeNone, @@ -926,9 +927,13 @@ pub fn NewClass( pub const Constructor = ConstructorWrapper.rfn; pub fn get() callconv(.C) [*c]js.JSClassRef { + if (!defined) { + definition = define(); + defined = true; + } + if (!loaded) { loaded = true; - definition = define(); ref = js.JSClassCreate(&definition); } diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig index 68f54d154..9251d1fa7 100644 --- a/src/js_parser/js_parser.zig +++ b/src/js_parser/js_parser.zig @@ -8104,7 +8104,7 @@ pub fn NewParser( } pub fn storeNameInRef(p: *P, name: string) !Ref { - if (comptime ParsePassSymbolUsageType != void) { + if (comptime track_symbol_usage_during_parse_pass) { if (p.parse_pass_symbol_uses.getPtr(name)) |res| { res.used = true; } |