<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>280214</bug_id>
          
          <creation_ts>2024-09-23 14:40:12 -0700</creation_ts>
          <short_desc>Debug assertion on https://www.browserbench.org/MotionMark1.3.1/developer.html</short_desc>
          <delta_ts>2024-11-18 00:29:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>279618</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2062473</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2024-09-23 14:40:12 -0700</bug_when>
    <thetext>m_isOwnedByMainThread == isMainThread()
/host/home/nzimmermann/Software/GitRepositories/WebKit/WebKitBuild/WPE/Release/WTF/Headers/wtf/RefCounted.h(124) : void WTF::RefCountedBase::applyRefDerefThreadingCheck() const
1   0x7dde91da2911 WTF::RefCountedBase::derefAllowingPartiallyDestroyedBase() const
2   0x7dde920f10e1 WebCore::ToggleButtonPart::~ToggleButtonPart()
3   0x7dde97ef183e WebCore::RenderObject::RenderObjectRareData::~RenderObjectRareData()
4   0x7dde97ef49a2 WebCore::RenderObject::removeRareData()
5   0x7dde97e0d059 WebCore::RenderElement::willBeDestroyed()
6   0x7dde97eda7b8 WebCore::RenderObject::destroy()
7   0x7dde980d0bda WebCore::RenderTreeBuilder::destroy(WebCore::RenderObject&amp;, WebCore::RenderTreeBuilder::CanCollapseAnonymousBlock)
8   0x7dde980d157e WebCore::RenderTreeBuilder::destroyAndCleanUpAnonymousWrappers(WebCore::RenderObject&amp;, WebCore::RenderElement const*)
9   0x7dde980e7766 WebCore::RenderTreeUpdater::tearDownRenderers(WebCore::Element&amp;, WebCore::RenderTreeUpdater::TeardownType, WebCore::RenderTreeBuilder&amp;)::{lambda(unsigned int)#1}::operator()(unsigned int) const
10  0x7dde980e6d43 WebCore::RenderTreeUpdater::tearDownRenderers(WebCore::Element&amp;, WebCore::RenderTreeUpdater::TeardownType, WebCore::RenderTreeBuilder&amp;)
11  0x7dde980e9473 WebCore::RenderTreeUpdater::updateElementRenderer(WebCore::Element&amp;, WebCore::Style::ElementUpdate const&amp;)
12  0x7dde980eb410 WebCore::RenderTreeUpdater::updateRenderTree(WebCore::ContainerNode&amp;)
13  0x7dde980eb8cd WebCore::RenderTreeUpdater::commit(std::unique_ptr&lt;WebCore::Style::Update, std::default_delete&lt;WebCore::Style::Update&gt; &gt;)
14  0x7dde96c0b79e WebCore::Document::updateRenderTree(std::unique_ptr&lt;WebCore::Style::Update, std::default_delete&lt;WebCore::Style::Update&gt; &gt;)
15  0x7dde96c796fe WebCore::Document::resolveStyle(WebCore::Document::ResolveStyleType)
16  0x7dde96c79ad9 WebCore::Document::updateStyleIfNeeded()
17  0x7dde96c79cbd WebCore::Document::updateLayout(WTF::OptionSet&lt;WebCore::LayoutOptions&gt;, WebCore::Element const*)
18  0x7dde97076576 WebCore::HTMLLabelElement::defaultEventHandler(WebCore::Event&amp;)
19  0x7dde96ce2f08 WebCore::EventDispatcher::dispatchEvent(WebCore::Node&amp;, WebCore::Event&amp;)
20  0x7dde9779701f WebCore::PointerCaptureController::dispatchEvent(WebCore::PointerEvent&amp;, WebCore::EventTarget*) [clone .part.0]
21  0x7dde96cc979e WebCore::Element::dispatchMouseEvent(WebCore::PlatformMouseEvent const&amp;, WTF::AtomString const&amp;, int, WebCore::Element*, WebCore::IsSyntheticClick)
22  0x7dde97669d31 WebCore::EventHandler::dispatchMouseEvent(WTF::AtomString const&amp;, WebCore::Node*, int, WebCore::PlatformMouseEvent const&amp;, WebCore::EventHandler::FireMouseOverOut)
23  0x7dde9766aa9b WebCore::EventHandler::swallowAnyClickEvent(WebCore::PlatformMouseEvent const&amp;, WebCore::MouseEventWithHitTestResults const&amp;, WebCore::EventHandler::IgnoreAncestorNodesForClickEvent)
24  0x7dde9767b0ad WebCore::EventHandler::handleMouseReleaseEvent(WebCore::PlatformMouseEvent const&amp;)
25  0x7dde92b6cd82 WebKit::WebFrame::handleMouseEvent(WebKit::WebMouseEvent const&amp;)
26  0x7dde92b3f957 WebKit::WebPage::mouseEvent(WebCore::ProcessQualified&lt;WTF::ObjectIdentifierGeneric&lt;WebCore::FrameIdentifierType, WTF::ObjectIdentifierMainThreadAccessTraits&lt;unsigned long&gt;, unsigned long, (WTF::SupportsObjectIdentifierNullState)0&gt; &gt;, WebKit::WebMouseEvent const&amp;, std::optional&lt;WTF::Vector&lt;WebKit::SandboxExtensionHandle, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt; &gt;&amp;&amp;)
27  0x7dde9204717e void IPC::handleMessage&lt;Messages::WebPage::MouseEvent, WebKit::WebPage, WebKit::WebPage, void (WebCore::ProcessQualified&lt;WTF::ObjectIdentifierGeneric&lt;WebCore::FrameIdentifierType, WTF::ObjectIdentifierMainThreadAccessTraits&lt;unsigned long&gt;, unsigned long, (WTF::SupportsObjectIdentifierNullState)0&gt; &gt;, WebKit::WebMouseEvent const&amp;, std::optional&lt;WTF::Vector&lt;WebKit::SandboxExtensionHandle, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt; &gt;&amp;&amp;)&gt;(IPC::Connection&amp;, IPC::Decoder&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(WebCore::ProcessQualified&lt;WTF::ObjectIdentifierGeneric&lt;WebCore::FrameIdentifierType, WTF::ObjectIdentifierMainThreadAccessTraits&lt;unsigned long&gt;, unsigned long, (WTF::SupportsObjectIdentifierNullState)0&gt; &gt;, WebKit::WebMouseEvent const&amp;, std::optional&lt;WTF::Vector&lt;WebKit::SandboxExtensionHandle, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt; &gt;&amp;&amp;)) [clone .isra.0]
28  0x7dde92058685 WebKit::WebPage::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
29  0x7dde9252e7e7 IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
30  0x7dde91f0f395 WebKit::AuxiliaryProcess::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
31  0x7dde92528dad IPC::Connection::dispatchMessage(WTF::UniqueRef&lt;IPC::Decoder&gt;) [clone .part.0]

Just opened the page, and made a random mouse movement, when I saw this. Opening a ticket, so we don&apos;t forget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2062867</commentid>
    <comment_count>1</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2024-09-24 15:38:15 -0700</bug_when>
    <thetext>I can reproduce it every time on WPE, with threaded CPU rendering activated, when clicking on the &apos;Run Benchmark&apos; button.

I checked how ControlParts are created:
RenderBox::paintBoxDecorations() calls RenderBox::ensureControlPartForRenderer(), which calls RenderBox::ensureControlPart(), which in turns calls theme().createControlPart() which creates a ToggleButtonPart object for the &apos;Run benchmark&apos; button.

In the threaded CPU rendering case, the ControlPart creation happens from within the worker thread, when we replay the previously recorded DisplayList (recording happened on the main thread).

As can be seen from the backtrace, the destruction of the RenderObjectRareData, and thus the ToggleButtonPart was triggered from the main thread during layout / style resolving.

Since ControlPart is not ThreadSafeRefCounted, the assertion popped up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2062870</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2024-09-24 15:47:22 -0700</bug_when>
    <thetext>This fixes the assertion for me:

diff --git a/Source/WebCore/platform/graphics/controls/ControlPart.h b/Source/WebCore/platform/graphics/controls/ControlPart.h
index 8aa1fd401bbe..ec931ea345aa 100644
--- a/Source/WebCore/platform/graphics/controls/ControlPart.h
+++ b/Source/WebCore/platform/graphics/controls/ControlPart.h
@@ -29,7 +29,7 @@
 #include &quot;ControlFactory.h&quot;
 #include &quot;PlatformControl.h&quot;
 #include &quot;StyleAppearance.h&quot;
-#include &lt;wtf/RefCounted.h&gt;
+#include &lt;wtf/ThreadSafeRefCounted.h&gt;
 
 namespace WebCore {
 
@@ -37,7 +37,7 @@ class FloatRect;
 class GraphicsContext;
 class ControlFactory;
 
-class ControlPart : public RefCounted&lt;ControlPart&gt; {
+class ControlPart : public ThreadSafeRefCounted&lt;ControlPart&gt; {
 public:
     virtual ~ControlPart() = default;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2062962</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2024-09-24 23:53:23 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/34215</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2063127</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-09-25 14:29:16 -0700</bug_when>
    <thetext>Committed 284244@main (f9961c9edb08): &lt;https://commits.webkit.org/284244@main&gt;

Reviewed commits have been landed. Closing PR #34215 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2063129</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2024-09-25 14:30:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/136707099&gt;</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>