Skip to content

Commit b51df8f

Browse files
committed
[JSC] Ensure PolymorphicCallNode is unlinked when it is detached from CallLinkInfo
https://bugs.webkit.org/show_bug.cgi?id=294469 rdar://153330169 Reviewed by Yijia Huang and Keith Miller. Let's ensure that PolymorphicCallNode is unlinked when it is detached from owner CallLinkInfo eagerly before it gets destroyed. * Source/JavaScriptCore/bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::clearStub): * Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallNode::unlinkForcefully): (JSC::PolymorphicCallStubRoutine::unlinkForcefully): (JSC::PolymorphicCallNode::clear): Deleted. (JSC::PolymorphicCallStubRoutine::clearCallNodesFor): Deleted. * Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.h: Canonical link: https://commits.webkit.org/296216@main
1 parent 66f5068 commit b51df8f

3 files changed

Lines changed: 8 additions & 6 deletions

File tree

‎Source/JavaScriptCore/bytecode/CallLinkInfo.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void CallLinkInfo::clearStub()
8888
if (!stub())
8989
return;
9090

91-
m_stub->clearCallNodesFor(this);
91+
m_stub->unlinkForcefully();
9292
m_stub = nullptr;
9393
}
9494

‎Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ void PolymorphicCallNode::unlinkOrUpgradeImpl(VM& vm, CodeBlock* oldCodeBlock, C
5555
}
5656
}
5757

58-
void PolymorphicCallNode::clear()
58+
void PolymorphicCallNode::unlinkForcefully()
5959
{
6060
m_cleared = true;
61+
if (isOnList())
62+
remove();
6163
}
6264

6365
PolymorphicCallStubRoutine* PolymorphicCallNode::owner()
@@ -150,10 +152,10 @@ CallEdgeList PolymorphicCallStubRoutine::edges() const
150152
return result;
151153
}
152154

153-
void PolymorphicCallStubRoutine::clearCallNodesFor(CallLinkInfo*)
155+
void PolymorphicCallStubRoutine::unlinkForcefully()
154156
{
155157
for (auto& callNode : leadingSpan())
156-
callNode.clear();
158+
callNode.unlinkForcefully();
157159
}
158160

159161
bool PolymorphicCallStubRoutine::visitWeakImpl(VM& vm)

‎Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.h‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class PolymorphicCallNode final : public CallLinkInfoBase {
5555

5656
void unlinkOrUpgradeImpl(VM&, CodeBlock*, CodeBlock*);
5757

58-
void clear();
58+
void unlinkForcefully();
5959

6060
PolymorphicCallStubRoutine* owner();
6161

@@ -94,7 +94,7 @@ class PolymorphicCallStubRoutine final : public GCAwareJITStubRoutine, public Bu
9494
bool hasEdges() const;
9595
CallEdgeList edges() const;
9696

97-
void clearCallNodesFor(CallLinkInfo*);
97+
void unlinkForcefully();
9898

9999
template<typename Functor>
100100
void forEachDependentCell(const Functor& functor) const

0 commit comments

Comments
 (0)