diff options
Diffstat (limited to 'src/bun.js/bindings/ZigGeneratedClasses.h')
| -rw-r--r-- | src/bun.js/bindings/ZigGeneratedClasses.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/bun.js/bindings/ZigGeneratedClasses.h b/src/bun.js/bindings/ZigGeneratedClasses.h index 69907386c..e94b33335 100644 --- a/src/bun.js/bindings/ZigGeneratedClasses.h +++ b/src/bun.js/bindings/ZigGeneratedClasses.h @@ -60,10 +60,37 @@ public: : Base(vm, structure) { m_ctx = sinkPtr; + m_weakThis = JSC::Weak<JSTCPSocket>(this, getOwner()); } void finishCreation(JSC::VM&); + JSC::Weak<JSTCPSocket> m_weakThis; + bool internalHasPendingActivity(); + bool hasPendingActivity() + { + if (UNLIKELY(!m_ctx)) + return false; + + return this->internalHasPendingActivity(); + } + + class Owner final : public JSC::WeakHandleOwner { + public: + bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, JSC::AbstractSlotVisitor&, const char**) final + { + auto* controller = JSC::jsCast<JSTCPSocket*>(handle.slot()->asCell()); + return controller->hasPendingActivity(); + } + void finalize(JSC::Handle<JSC::Unknown>, void* context) final {} + }; + + static JSC::WeakHandleOwner* getOwner() + { + static NeverDestroyed<Owner> m_owner; + return &m_owner.get(); + } + DECLARE_VISIT_CHILDREN; mutable JSC::WriteBarrier<JSC::Unknown> m_data; @@ -115,10 +142,37 @@ public: : Base(vm, structure) { m_ctx = sinkPtr; + m_weakThis = JSC::Weak<JSTLSSocket>(this, getOwner()); } void finishCreation(JSC::VM&); + JSC::Weak<JSTLSSocket> m_weakThis; + bool internalHasPendingActivity(); + bool hasPendingActivity() + { + if (UNLIKELY(!m_ctx)) + return false; + + return this->internalHasPendingActivity(); + } + + class Owner final : public JSC::WeakHandleOwner { + public: + bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, JSC::AbstractSlotVisitor&, const char**) final + { + auto* controller = JSC::jsCast<JSTLSSocket*>(handle.slot()->asCell()); + return controller->hasPendingActivity(); + } + void finalize(JSC::Handle<JSC::Unknown>, void* context) final {} + }; + + static JSC::WeakHandleOwner* getOwner() + { + static NeverDestroyed<Owner> m_owner; + return &m_owner.get(); + } + DECLARE_VISIT_CHILDREN; mutable JSC::WriteBarrier<JSC::Unknown> m_data; |
