From 777ee4ececebe912a08c1ffe69546aacb6a497c7 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Tue, 18 Jul 2023 04:34:27 -0700 Subject: Fixes #3669 --- src/bun.js/bindings/ScriptExecutionContext.cpp | 15 +++------------ src/bun.js/bindings/ZigGlobalObject.cpp | 26 +++++++++++++++++++++++++- src/bun.js/bindings/ZigGlobalObject.h | 2 ++ src/bun.js/bindings/webcore/Worker.cpp | 5 +++++ 4 files changed, 35 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/bun.js/bindings/ScriptExecutionContext.cpp b/src/bun.js/bindings/ScriptExecutionContext.cpp index b7b7ef16d..f878fd9fb 100644 --- a/src/bun.js/bindings/ScriptExecutionContext.cpp +++ b/src/bun.js/bindings/ScriptExecutionContext.cpp @@ -112,24 +112,15 @@ us_socket_context_t* ScriptExecutionContext::connectedWebSocketKindClientSSL() ScriptExecutionContextIdentifier ScriptExecutionContext::generateIdentifier() { - Locker locker { allScriptExecutionContextsMapLock }; - - // ASSERT(allScriptExecutionContextsMap().contains(m_identifier)); - // allScriptExecutionContextsMap().remove(m_identifier); - return ++lastUniqueIdentifier; } void ScriptExecutionContext::regenerateIdentifier() { - Locker locker { allScriptExecutionContextsMapLock }; - - // ASSERT(allScriptExecutionContextsMap().contains(m_identifier)); - // allScriptExecutionContextsMap().remove(m_identifier); m_identifier = ++lastUniqueIdentifier; - // ASSERT(!allScriptExecutionContextsMap().contains(m_identifier)); + Locker locker { allScriptExecutionContextsMapLock }; allScriptExecutionContextsMap().add(m_identifier, this); } @@ -137,14 +128,14 @@ void ScriptExecutionContext::addToContextsMap() { Locker locker { allScriptExecutionContextsMapLock }; ASSERT(!allScriptExecutionContextsMap().contains(m_identifier)); - // allScriptExecutionContextsMap().add(m_identifier, this); + allScriptExecutionContextsMap().add(m_identifier, this); } void ScriptExecutionContext::removeFromContextsMap() { Locker locker { allScriptExecutionContextsMapLock }; ASSERT(allScriptExecutionContextsMap().contains(m_identifier)); - // allScriptExecutionContextsMap().remove(m_identifier); + allScriptExecutionContextsMap().remove(m_identifier); } ScriptExecutionContext* executionContext(JSC::JSGlobalObject* globalObject) diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index a5c96ee08..a8d14e533 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -719,6 +719,7 @@ GlobalObject::GlobalObject(JSC::VM& vm, JSC::Structure* structure, WebCore::Scri mockModule = Bun::JSMockModule::create(this); m_scriptExecutionContext = context; context->setGlobalObject(this); + context->addToContextsMap(); } GlobalObject::~GlobalObject() @@ -4472,7 +4473,7 @@ void GlobalObject::visitChildrenImpl(JSCell* cell, Visitor& visitor) thisObject->visitGeneratedLazyClasses(thisObject, visitor); visitor.append(thisObject->m_BunCommonJSModuleValue); - + thisObject->visitAdditionalChildren(visitor); ScriptExecutionContext* context = thisObject->scriptExecutionContext(); visitor.addOpaqueRoot(context); } @@ -4540,6 +4541,29 @@ void GlobalObject::handleRejectedPromises() DEFINE_VISIT_CHILDREN(GlobalObject); +template +void GlobalObject::visitAdditionalChildren(Visitor& visitor) +{ + GlobalObject* thisObject = this; + ASSERT_GC_OBJECT_INHERITS(thisObject, info()); + + thisObject->globalEventScope->visitJSEventListeners(visitor); +} + +DEFINE_VISIT_ADDITIONAL_CHILDREN(GlobalObject); + +template +void GlobalObject::visitOutputConstraints(JSCell* cell, Visitor& visitor) +{ + auto* thisObject = jsCast(cell); + ASSERT_GC_OBJECT_INHERITS(thisObject, info()); + Base::visitOutputConstraints(thisObject, visitor); + thisObject->visitAdditionalChildren(visitor); +} + +template void GlobalObject::visitOutputConstraints(JSCell*, AbstractSlotVisitor&); +template void GlobalObject::visitOutputConstraints(JSCell*, SlotVisitor&); + // void GlobalObject::destroy(JSCell* cell) // { // static_cast(cell)->Zig::GlobalObject::~Zig::GlobalObject(); diff --git a/src/bun.js/bindings/ZigGlobalObject.h b/src/bun.js/bindings/ZigGlobalObject.h index c98e499b0..5df1560b0 100644 --- a/src/bun.js/bindings/ZigGlobalObject.h +++ b/src/bun.js/bindings/ZigGlobalObject.h @@ -154,6 +154,8 @@ public: WebCore::DOMWrapperWorld& world() { return m_world.get(); } DECLARE_VISIT_CHILDREN; + template void visitAdditionalChildren(Visitor&); + template static void visitOutputConstraints(JSCell*, Visitor&); bool worldIsNormal() const { return m_worldIsNormal; } static ptrdiff_t offsetOfWorldIsNormal() { return OBJECT_OFFSETOF(GlobalObject, m_worldIsNormal); } diff --git a/src/bun.js/bindings/webcore/Worker.cpp b/src/bun.js/bindings/webcore/Worker.cpp index fe7dc2544..4ffbc0684 100644 --- a/src/bun.js/bindings/webcore/Worker.cpp +++ b/src/bun.js/bindings/webcore/Worker.cpp @@ -351,6 +351,11 @@ void Worker::forEachWorker(const FunctionscriptExecutionContext(); + if (ctx) { + ctx->removeFromContextsMap(); + } + auto& vm = globalObject->vm(); if (JSC::JSObject* obj = JSC::jsDynamicCast(globalObject->moduleLoader())) { -- cgit v1.2.3