From 38b5a85d8ae030acdead6d169735317a66d23d94 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Sat, 19 Nov 2022 01:25:15 -0800 Subject: Fix a GC issue with `Bun.spawn` The `Subprocess` object stays alive until the process exits, even if it's never referenced --- src/bun.js/scripts/generate-classes.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/bun.js/scripts/generate-classes.ts') diff --git a/src/bun.js/scripts/generate-classes.ts b/src/bun.js/scripts/generate-classes.ts index aa0eab9d8..60d269894 100644 --- a/src/bun.js/scripts/generate-classes.ts +++ b/src/bun.js/scripts/generate-classes.ts @@ -923,7 +923,7 @@ function generateClassHeader(typeName, obj: ClassDefinition) { JSC::Weak<${name}> m_weakThis; bool internalHasPendingActivity(); bool hasPendingActivity() { - if (!m_ctx) + if (UNLIKELY(!m_ctx)) return false; return this->internalHasPendingActivity(); @@ -946,7 +946,7 @@ function generateClassHeader(typeName, obj: ClassDefinition) { } `; weakInit = ` - m_weakThis = JSC::Weak<${name}>(vm, this, getOwner()); + m_weakThis = JSC::Weak<${name}>(this, getOwner()); `; } return ` @@ -1074,7 +1074,7 @@ DEFINE_VISIT_CHILDREN(${name}); if (hasPendingActivity) { output += ` extern "C" bool ${symbolName(typeName, "hasPendingActivity")}(void* ptr); - ${name}::internalHasPendingActivity() { + bool ${name}::internalHasPendingActivity() { return ${symbolName(typeName, "hasPendingActivity")}(m_ctx); } `; @@ -1188,7 +1188,7 @@ ${DEFINE_VISIT_CHILDREN} } function generateHeader(typeName, obj) { - return generateClassHeader(typeName, obj).trim(); + return generateClassHeader(typeName, obj).trim() + "\n\n"; } function generateImpl(typeName, obj) { @@ -1620,15 +1620,16 @@ const GENERATED_CLASSES_IMPL_HEADER = ` // GENERATED CODE - DO NOT MODIFY BY HAND // Generated by make codegen #include "root.h" - + +#include "BunClientData.h" +#include "ZigGlobalObject.h" + #include #include #include #include #include -#include "ZigGlobalObject.h" - #include #include "DOMJITIDLConvert.h" #include "DOMJITIDLType.h" -- cgit v1.2.3