aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-16 04:01:13 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-16 04:01:13 -0800
commit5a80a2e216ded1d37c18ff54d9d3fa44e1bacc77 (patch)
treefb4c78c3ea1a251e8ce953bbe6335b2cea5fc5bc
parent3ab56cee8abe6a28eba3af64308762cf2349e8bc (diff)
downloadbun-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.zig11
-rw-r--r--src/js_parser/js_parser.zig2
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;
}