aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-07-18 04:34:27 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-07-18 04:35:04 -0700
commit777ee4ececebe912a08c1ffe69546aacb6a497c7 (patch)
tree53a15abae027e3bf5cfdedc70744ce543d7f21f6
parent661355546a4658ea927bfd70698577c1db301243 (diff)
downloadbun-777ee4ececebe912a08c1ffe69546aacb6a497c7.tar.gz
bun-777ee4ececebe912a08c1ffe69546aacb6a497c7.tar.zst
bun-777ee4ececebe912a08c1ffe69546aacb6a497c7.zip
Fixes #3669
-rw-r--r--src/bun.js/bindings/ScriptExecutionContext.cpp15
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp26
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.h2
-rw-r--r--src/bun.js/bindings/webcore/Worker.cpp5
4 files changed, 35 insertions, 13 deletions
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<Visitor>(thisObject, visitor);
visitor.append(thisObject->m_BunCommonJSModuleValue);
-
+ thisObject->visitAdditionalChildren<Visitor>(visitor);
ScriptExecutionContext* context = thisObject->scriptExecutionContext();
visitor.addOpaqueRoot(context);
}
@@ -4540,6 +4541,29 @@ void GlobalObject::handleRejectedPromises()
DEFINE_VISIT_CHILDREN(GlobalObject);
+template<typename Visitor>
+void GlobalObject::visitAdditionalChildren(Visitor& visitor)
+{
+ GlobalObject* thisObject = this;
+ ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+ thisObject->globalEventScope->visitJSEventListeners(visitor);
+}
+
+DEFINE_VISIT_ADDITIONAL_CHILDREN(GlobalObject);
+
+template<typename Visitor>
+void GlobalObject::visitOutputConstraints(JSCell* cell, Visitor& visitor)
+{
+ auto* thisObject = jsCast<GlobalObject*>(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<Zig::GlobalObject*>(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<typename Visitor> void visitAdditionalChildren(Visitor&);
+ template<typename Visitor> 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 Function<Function<void(ScriptExecutionContext&)
extern "C" void WebWorker__dispatchExit(Zig::GlobalObject* globalObject, Worker* worker, int32_t exitCode)
{
if (globalObject) {
+ auto* ctx = globalObject->scriptExecutionContext();
+ if (ctx) {
+ ctx->removeFromContextsMap();
+ }
+
auto& vm = globalObject->vm();
if (JSC::JSObject* obj = JSC::jsDynamicCast<JSC::JSObject*>(globalObject->moduleLoader())) {