<?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>207354</bug_id>
          
          <creation_ts>2020-02-06 14:28:23 -0800</creation_ts>
          <short_desc>REGRESSION (r254706): Crash under WebProcessPool::terminateServiceWorkerProcess()</short_desc>
          <delta_ts>2020-02-07 09:18:25 -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>Service Workers</component>
          <version>WebKit Nightly 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>206325</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1615812</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-02-06 14:28:23 -0800</bug_when>
    <thetext>REGRESSION (r254706): Crash under WebProcessPool::terminateServiceWorkerProcess():
Thread[0] EXC_BAD_ACCESS (SIGSEGV) (KERN_INVALID_ADDRESS at 0x0000000000000020)
[  0] 0x00000001acec5d38 WebKit`WebKit::AuxiliaryProcessProxy::state() const [inlined] WTF::RefPtr&lt;WebKit::ProcessLauncher, WTF::DumbPtrTraits&lt;WebKit::ProcessLauncher&gt; &gt;::operator bool() const at RefPtr.h:87:47

 -&gt;  0x00000001acec5d38:      ldr x8, [x0, #0x20]
     0x00000001acec5d3c:      cbz x8, 0x20bd50         ; &lt;+24&gt; [inlined] WTF::RefPtr&lt;IPC::Connection, WTF::DumbPtrTraits&lt;IPC::Connection&gt; &gt;::operator!() const at AuxiliaryProcessProxy.cpp:117
     0x00000001acec5d40:     ldrb w8, [x8, #0x58]
     0x00000001acec5d44:      cbz w8, 0x20bd50         ; &lt;+24&gt; [inlined] WTF::RefPtr&lt;IPC::Connection, WTF::DumbPtrTraits&lt;IPC::Connection&gt; &gt;::operator!() const at AuxiliaryProcessProxy.cpp:117
     0x00000001acec5d48:      mov w0, #0x0

[  0] 0x00000001acec5d38 WebKit`WebKit::AuxiliaryProcessProxy::state() const at AuxiliaryProcessProxy.cpp:114
       110 	}
       111 	
       112 	AuxiliaryProcessProxy::State AuxiliaryProcessProxy::state() const
       113 	{
    -&gt; 114 	    if (m_processLauncher &amp;&amp; m_processLauncher-&gt;isLaunching())
       115 	        return AuxiliaryProcessProxy::State::Launching;
       116 	
       117 	    if (!m_connection)
       118 	        return AuxiliaryProcessProxy::State::Terminated;
    
[  1] 0x00000001acf759e3 WebKit`WebKit::WebProcessProxy::requestTermination(WebKit::ProcessTerminationReason) + 55 at WebProcessProxy.cpp:1084:9
       1080	}
       1081	
       1082	void WebProcessProxy::requestTermination(ProcessTerminationReason reason)
       1083	{
    -&gt; 1084	    if (state() == State::Terminated)
       1085	        return;
       1086	
       1087	    auto protectedThis = makeRef(*this);
       1088	    RELEASE_LOG_IF(isReleaseLoggingAllowed(), Process, &quot;%p - WebProcessProxy::requestTermination - reason %d&quot;, this, reason);
    
[  2] 0x00000001acf7595f WebKit`WebKit::WebProcessPool::terminateServiceWorkerProcess(WebCore::RegistrableDomain const&amp;, PAL::SessionID const&amp;) + 183 at WebProcessPool.cpp:1788:18
       1784	#if ENABLE(SERVICE_WORKER)
       1785	    auto protectedThis = makeRef(*this);
       1786	    if (auto process = m_serviceWorkerProcesses.get({ domain, sessionID })) {
       1787	        process-&gt;disableServiceWorkers();
    -&gt; 1788	        process-&gt;requestTermination(ProcessTerminationReason::ExceededCPULimit);
       1789	    }
       1790	#endif
       1791	}
       1792	
    
[  3] 0x00000001ad01e5cf WebKit`WebKit::NetworkProcessProxy::terminateUnresponsiveServiceWorkerProcesses(WebCore::RegistrableDomain&amp;&amp;, PAL::SessionID) + 63 at NetworkProcessProxy.cpp:430:22
[  4] 0x00000001acd2c227 WebKit`WebKit::NetworkProcessProxy::didReceiveNetworkProcessProxyMessage(IPC::Connection&amp;, IPC::Decoder&amp;) [inlined] void IPC::callMemberFunctionImpl&lt;WebKit::NetworkProcessProxy, void (WebKit::NetworkProcessProxy::*)(WebCore::RegistrableDomain&amp;&amp;, PAL::SessionID), std::__1::tuple&lt;WebCore::RegistrableDomain, PAL::SessionID&gt;, 0ul, 1ul&gt;(WebKit::NetworkProcessProxy*, void (WebKit::NetworkProcessProxy::*)(WebCore::RegistrableDomain&amp;&amp;, PAL::SessionID), std::__1::tuple&lt;WebCore::RegistrableDomain, PAL::SessionID&gt;&amp;&amp;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul&gt;) + 15 at HandleMessage.h:41:5
[  4] 0x00000001acd2c218 WebKit`WebKit::NetworkProcessProxy::didReceiveNetworkProcessProxyMessage(IPC::Connection&amp;, IPC::Decoder&amp;) [inlined] void IPC::callMemberFunction&lt;WebKit::NetworkProcessProxy, void (WebKit::NetworkProcessProxy::*)(WebCore::RegistrableDomain&amp;&amp;, PAL::SessionID), std::__1::tuple&lt;WebCore::RegistrableDomain, PAL::SessionID&gt;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul&gt; &gt;(std::__1::tuple&lt;WebCore::RegistrableDomain, PAL::SessionID&gt;&amp;&amp;, WebKit::NetworkProcessProxy*, void (WebKit::NetworkProcessProxy::*)(WebCore::RegistrableDomain&amp;&amp;, PAL::SessionID)) at HandleMessage.h:47
[  4] 0x00000001acd2c218 WebKit`WebKit::NetworkProcessProxy::didReceiveNetworkProcessProxyMessage(IPC::Connection&amp;, IPC::Decoder&amp;) [inlined] void IPC::handleMessage&lt;Messages::NetworkProcessProxy::TerminateUnresponsiveServiceWorkerProcesses, WebKit::NetworkProcessProxy, void (WebKit::NetworkProcessProxy::*)(WebCore::RegistrableDomain&amp;&amp;, PAL::SessionID)&gt;(IPC::Decoder&amp;, WebKit::NetworkProcessProxy*, void (WebKit::NetworkProcessProxy::*)(WebCore::RegistrableDomain&amp;&amp;, PAL::SessionID)) + 32 at HandleMessage.h:120
[  4] 0x00000001acd2c1f8 WebKit`WebKit::NetworkProcessProxy::didReceiveNetworkProcessProxyMessage(IPC::Connection&amp;, IPC::Decoder&amp;) + 1360 at NetworkProcessProxyMessageReceiver.cpp:215</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615813</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-02-06 14:28:40 -0800</bug_when>
    <thetext>&lt;rdar://problem/59184818&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615819</commentid>
    <comment_count>2</comment_count>
      <attachid>389997</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-02-06 14:31:54 -0800</bug_when>
    <thetext>Created attachment 389997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615833</commentid>
    <comment_count>3</comment_count>
      <attachid>389997</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-02-06 14:38:50 -0800</bug_when>
    <thetext>Comment on attachment 389997
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615886</commentid>
    <comment_count>4</comment_count>
      <attachid>389997</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-06 15:35:12 -0800</bug_when>
    <thetext>Comment on attachment 389997
Patch

Clearing flags on attachment: 389997

Committed r255989: &lt;https://trac.webkit.org/changeset/255989&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615887</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-06 15:35:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615998</commentid>
    <comment_count>6</comment_count>
      <attachid>389997</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-06 18:56:21 -0800</bug_when>
    <thetext>Comment on attachment 389997
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=389997&amp;action=review

&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1779
&gt;      auto protectedThis = makeRef(*this);

Is this still helpful?

&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1780
&gt; +    if (RefPtr&lt;WebProcessProxy&gt; process = m_serviceWorkerProcesses.get({ domain, sessionID }).get()) {

Can this use makeRefPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616145</commentid>
    <comment_count>7</comment_count>
      <attachid>389997</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-02-07 08:14:01 -0800</bug_when>
    <thetext>Comment on attachment 389997
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=389997&amp;action=review

&gt;&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1779
&gt;&gt;      auto protectedThis = makeRef(*this);
&gt; 
&gt; Is this still helpful?

I don&apos;t think so since the WebProcessProxy refs its WebProcessPool. That said, I don&apos;t think it hurts much to keep it and it did not feel right to remove a protector in a crash fix.

&gt;&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1780
&gt;&gt; +    if (RefPtr&lt;WebProcessProxy&gt; process = m_serviceWorkerProcesses.get({ domain, sessionID }).get()) {
&gt; 
&gt; Can this use makeRefPtr?

Yes, I did not realize this was the preferred pattern. I can switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616154</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-02-07 08:30:12 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; Comment on attachment 389997 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=389997&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1779
&gt; &gt;&gt;      auto protectedThis = makeRef(*this);
&gt; &gt; 
&gt; &gt; Is this still helpful?
&gt; 
&gt; I don&apos;t think so since the WebProcessProxy refs its WebProcessPool. That
&gt; said, I don&apos;t think it hurts much to keep it and it did not feel right to
&gt; remove a protector in a crash fix.
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1780
&gt; &gt;&gt; +    if (RefPtr&lt;WebProcessProxy&gt; process = m_serviceWorkerProcesses.get({ domain, sessionID }).get()) {
&gt; &gt; 
&gt; &gt; Can this use makeRefPtr?
&gt; 
&gt; Yes, I did not realize this was the preferred pattern. I can switch.

&lt;https://trac.webkit.org/changeset/256022&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616177</commentid>
    <comment_count>9</comment_count>
      <attachid>389997</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-07 09:18:25 -0800</bug_when>
    <thetext>Comment on attachment 389997
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=389997&amp;action=review

&gt;&gt;&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1780
&gt;&gt;&gt; +    if (RefPtr&lt;WebProcessProxy&gt; process = m_serviceWorkerProcesses.get({ domain, sessionID }).get()) {
&gt;&gt; 
&gt;&gt; Can this use makeRefPtr?
&gt; 
&gt; Yes, I did not realize this was the preferred pattern. I can switch.

Not sure we have 100% consensus. What I like about makeRefPtr is that it emphasizes the lifetime part without possible doing an upcast as a side effect. For example, makeRefPtr on a HTMLPluginElement rather than using RefPtr&lt;Element&gt;. What some others don’t like about makeRefPtr is that the concrete type is implicit and you can’t see it when reading the code (same as with other cases where we use auto or an expression without putting it into local variable).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389997</attachid>
            <date>2020-02-06 14:31:54 -0800</date>
            <delta_ts>2020-02-06 15:35:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207354-20200206143154.patch</filename>
            <type>text/plain</type>
            <size>1892</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1OTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRhOTY1ZWYwZmU0MGQxYzY5
ZjA3Y2ZiZTkzNDlkOGUxYmI5NGM1ZTcuLmNjYmJmYTVhMTc0MGNmZWU3MjA1MDBmNDNiOGIyYmVh
OTc2ZDcwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDItMDYgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OIChyMjU0NzA2KTog
Q3Jhc2ggdW5kZXIgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzM1
NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTkxODQ4MTg+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBub3QgZWFzaWx5IHRl
c3RhYmxlIEFGQUlLIHNpbmNlIHRoaXMgaGFwcGVucyBvbiBmYWlsdXJlIHRvIHNlbmQgc3luYyBJ
UEMgdG8KKyAgICAgICAgdGhlIHNlcnZpY2Ugd29ya2VyIHdoZW4gdGVybWluYXRpbmcgaXQuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAnYXV0bycgcmVzb2x2ZWQgdG8gJ1dlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5PicgaW4gdGhpcyBt
ZXRob2QgYW5kIHRoZSBjYWxsIHRvCisgICAgICAgIGRpc2FibGVTZXJ2aWNlV29ya2VycygpIGNv
dWxkIGNhdXNlIHRoZSBwcm9jZXNzIHRvIGdldCBkZXN0cm95ZWQuIFdlIHdvdWxkIHRoZW4KKyAg
ICAgICAgZG8gYSBudWxsIGRlcmVmZXJlbmNlIG9uIHRoZSBuZXh0IGxpbmUuCisKIDIwMjAtMDIt
MDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMjU1OTU1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCmluZGV4IGFhYzMzMmU5YjQ2NzY3YTI3MDM4NDlmMmU4NDMxOTU0Y2QyMDZhYjku
LmFkYzY0YjUxYTkxNDhmNDY1ZDdlYTFhOWVjZWJkOTNkM2VhMzRiZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE3NzcsNyArMTc3Nyw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGNvbnN0IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAg
IGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwotICAgIGlmIChhdXRvIHByb2Nl
c3MgPSBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuZ2V0KHsgZG9tYWluLCBzZXNzaW9uSUQgfSkp
IHsKKyAgICBpZiAoUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IG1fc2VydmljZVdv
cmtlclByb2Nlc3Nlcy5nZXQoeyBkb21haW4sIHNlc3Npb25JRCB9KS5nZXQoKSkgewogICAgICAg
ICBwcm9jZXNzLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICAgICAgICAgcHJvY2Vzcy0+cmVx
dWVzdFRlcm1pbmF0aW9uKFByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbjo6RXhjZWVkZWRDUFVMaW1p
dCk7CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>