<?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>190113</bug_id>
          
          <creation_ts>2018-09-29 15:01:12 -0700</creation_ts>
          <short_desc>ASAN failure in ~GCReachableRef()</short_desc>
          <delta_ts>2018-10-01 19:59:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>190115</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1464804</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 15:01:12 -0700</bug_when>
    <thetext>~GCReachableRef can cause an ASAN failure if it&apos;s called after it had been WTFMove&apos;d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464805</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 15:01:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/44866778&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464806</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 15:10:06 -0700</bug_when>
    <thetext>Hm... it looks like custom-elements-reaction-queue-retains-js-wrapper.html would always timeout in ASAN builds :( Probably too much malloc involved with the test.

Is there a way to skip a test only in ASAN builds?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464808</commentid>
    <comment_count>3</comment_count>
      <attachid>351200</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 15:14:46 -0700</bug_when>
    <thetext>Created attachment 351200
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464810</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-09-29 16:13:24 -0700</bug_when>
    <thetext>ASan shouldn’t be orders of magnitude slower than release. I would expect some cause specific to this test. 

Does it ever finish with --no-timeout?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464811</commentid>
    <comment_count>5</comment_count>
      <attachid>351200</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-09-29 16:22:02 -0700</bug_when>
    <thetext>Comment on attachment 351200
Fixes the bug

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        The bug was caused by ~GCReachableRef accessing Ref after it had been poisoned for ASAN
&gt; +        in Ref::leakRef via Ref(Ref&amp;&amp; other). Fixed the bug by using RefPtr instead since that&apos;s
&gt; +        the simplest solution here although we could unpoison Ref temporarily as done in ~Ref.

In ~GCReachableRef, who calls Ref::leakRef?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464815</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 17:09:29 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #5)
&gt; Comment on attachment 351200 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351200&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        The bug was caused by ~GCReachableRef accessing Ref after it had been poisoned for ASAN
&gt; &gt; +        in Ref::leakRef via Ref(Ref&amp;&amp; other). Fixed the bug by using RefPtr instead since that&apos;s
&gt; &gt; +        the simplest solution here although we could unpoison Ref temporarily as done in ~Ref.
&gt; 
&gt; In ~GCReachableRef, who calls Ref::leakRef?

GCReachableRef(GCReachableRef&amp;&amp;), which WTFMove&apos;s Ref, which invokes leakRef on Ref in the original / source GCReachableRef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464818</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 17:48:15 -0700</bug_when>
    <thetext>Hm... it looks like the timeout I&apos;m experiencing is nothing to do with this code / patch or custom elements. WebKitTestRunner&apos;s WebContent process can end up stalling and sit there without doing anything, and the set of tests in which this problem reproduces shifts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464819</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 17:49:28 -0700</bug_when>
    <thetext>Maybe yet another fallout from https://trac.webkit.org/changeset/236512?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464822</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 18:02:36 -0700</bug_when>
    <thetext>Man... our testing infrastructure isn&apos;t in a good shape lately. iOS EWS is still suffering from the same data migration issue:

RuntimeError raised: Timed out while waiting for data migration
Traceback (most recent call last):
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py&quot;, line 85, in main
    run_details = run(port, options, args, stderr)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py&quot;, line 448, in run
    run_details = manager.run(args)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py&quot;, line 246, in run
    if not self._set_up_run(tests_to_run):
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py&quot;, line 181, in _set_up_run
    self._port.setup_test_run(self._options.device_class)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/port/ios.py&quot;, line 160, in setup_test_run
    self._create_devices(device_class)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/port/ios_simulator.py&quot;, line 103, in _create_devices
    SimulatedDeviceManager.initialize_devices([request] * self.child_processes(), self.host)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/xcode/simulated_device.py&quot;, line 370, in initialize_devices
    SimulatedDeviceManager.wait_until_data_migration_is_done(host, max(0, deadline - time.time()))
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/xcode/simulated_device.py&quot;, line 430, in wait_until_data_migration_is_done
    raise RuntimeError(&apos;Timed out while waiting for data migration&apos;)
RuntimeError: Timed out while waiting for data migration
Stopping HTTP server ...
Stopping WebSocket server ...
Stopping Web Platform Test server ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464827</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 18:59:34 -0700</bug_when>
    <thetext>Hm... I can still reproduce the stall at r236511 but whatever causing it is to do with WebKitTestRunner or run-webkit-tests. Weirdly, specifying --time-out-ms=3000 would cause the tests to timeout less frequently despite of the fact none of the tests are timing out.

Anyhow, I don&apos;t think this is anything to do with this bug or the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464898</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-09-30 20:21:42 -0700</bug_when>
    <thetext>&gt; &gt; In ~GCReachableRef, who calls Ref::leakRef?
&gt; 
&gt; GCReachableRef(GCReachableRef&amp;&amp;), which WTFMove&apos;s Ref, which invokes leakRef
&gt; on Ref in the original / source GCReachableRef.

In ~GCReachableRef, who calls GCReachableRef(GCReachableRef&amp;&amp;)? :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464903</commentid>
    <comment_count>12</comment_count>
      <attachid>351200</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-30 20:52:51 -0700</bug_when>
    <thetext>Comment on attachment 351200
Fixes the bug

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

&gt; Source/WebCore/dom/GCReachableRef.h:66
&gt; +        : m_ptr(WTFMove(other.m_ptr))

This line of code is wrong and uses of this function template won’t compile. Since &quot;other&quot; is a Ref, it does not have an &quot;m_ptr&quot; member to move from. The reason we don’t see a compiler error is that there are no uses of this function template. Maybe we should delete it for now? Or we could add unit tests for it if we want to keep it.

&gt; Source/WebCore/dom/GCReachableRef.h:75
&gt;      GCReachableRef(GCReachableRef&amp;&amp; other)
&gt; -        : m_ref(WTFMove(other.m_ref))
&gt; +        : m_ptr(WTFMove(other.m_ptr))
&gt;      {
&gt;      }

This is the same as the default implementation; we could get the same effect with &quot;= default&quot; here or maybe by omitting this entirely and letting it get generated.

On reflection, though, I realize that one thing this lacks is an assertion that the &quot;other&quot; is not already null. Perhaps we should leave this explicitly written out, but also explicitly forbid moving out of the same object twice just as the move constructor in Ref does, by asserting the pointer is non-null in the function body.

&gt; Source/WebCore/dom/GCReachableRef.h:77
&gt;      template&lt;typename X, typename Y&gt; GCReachableRef(const GCReachableRef&lt;X, Y&gt;&amp; other) = delete;

It doesn&apos;t makes sense that we would have to delete this function template. Yes, we need to delete the automatically generated copy constructor, since the code it generates would be incorrect, but this copy-constructor-like function template should *not* be automatically generated so it should not need to be deleted.

The same logic applies in the Ref class. I have no idea why the copy-constructor-like and assignment-operator-like template functions need to be deleted in that class. I believe those lines of code in Ref.h have no effect and are unnecessary.

When GCReachableRef was using a Ref for a member, though, we did *not* need to delete its copy constructor, the Ref member already prevented it from being generated. But now that we are using RefPtr instead, we need to prevent the automatic generation of the copy constructor and copy assignment operator either directly with delete or indirectly by defining the move constructor and move assignment operator.

So this line should go. And we have additional work to do to make sure we don’t automatically generate an incorrect copy constructor and assignment operator.

&gt; Source/WebCore/dom/GCReachableRef.h:80
&gt; +    T* operator-&gt;() const { ASSERT(m_ptr); return m_ptr.get(); }
&gt; +    T* ptr() const RETURNS_NONNULL { ASSERT(m_ptr); return m_ptr.get(); }

Would be nice to not have to write out the assertion. Maybe just call &amp;get() in these functions?

&gt; Source/WebCore/dom/GCReachableRef.h:83
&gt; +    T&amp; get() const { ASSERT(m_ptr); return *m_ptr; }
&gt; +    operator T&amp;() const { ASSERT(m_ptr); return *m_ptr; }
&gt; +    bool operator!() const { ASSERT(m_ptr); return !*m_ptr; }

RefPtr::operator* already asserts, so there is no need for additional assertion here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464904</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-30 21:02:50 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #11)
&gt; &gt; &gt; In ~GCReachableRef, who calls Ref::leakRef?
&gt; &gt; 
&gt; &gt; GCReachableRef(GCReachableRef&amp;&amp;), which WTFMove&apos;s Ref, which invokes leakRef
&gt; &gt; on Ref in the original / source GCReachableRef.
&gt; 
&gt; In ~GCReachableRef, who calls GCReachableRef(GCReachableRef&amp;&amp;)? :P

The language Ryosuke was using was imprecise.

The error in GCReachableRef before this patch is that ~GCReachableRef was calling GCReachableRef::isNull, which in turn was implemented with a call to Ref::isHashTableEmptyValue. It‘s not OK to call Ref::isHashTableEmptyValue on a Ref once Ref::leakRef has been called on it.

Despite the fact that a moved-from or leakRef&apos;d-from Ref uses the same value, nullptr, that hash table empty values do, the use of poisoning means we can&apos;t blur the distinction between these two.

One way to fix this would have been to write a new GCReachableRef::isNull that uses some different function in Ref that knows how to answer the question in a way that works even on poisoned memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464911</commentid>
    <comment_count>14</comment_count>
      <attachid>351200</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-30 22:56:19 -0700</bug_when>
    <thetext>Comment on attachment 351200
Fixes the bug

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

&gt;&gt; Source/WebCore/dom/GCReachableRef.h:66
&gt;&gt; +        : m_ptr(WTFMove(other.m_ptr))
&gt; 
&gt; This line of code is wrong and uses of this function template won’t compile. Since &quot;other&quot; is a Ref, it does not have an &quot;m_ptr&quot; member to move from. The reason we don’t see a compiler error is that there are no uses of this function template. Maybe we should delete it for now? Or we could add unit tests for it if we want to keep it.

Sure, will remove.

&gt;&gt; Source/WebCore/dom/GCReachableRef.h:75
&gt;&gt;      }
&gt; 
&gt; This is the same as the default implementation; we could get the same effect with &quot;= default&quot; here or maybe by omitting this entirely and letting it get generated.
&gt; 
&gt; On reflection, though, I realize that one thing this lacks is an assertion that the &quot;other&quot; is not already null. Perhaps we should leave this explicitly written out, but also explicitly forbid moving out of the same object twice just as the move constructor in Ref does, by asserting the pointer is non-null in the function body.

Oh weird. I thought I had added ASSERT here but clearly I forgot. Will add the assertion.

&gt;&gt; Source/WebCore/dom/GCReachableRef.h:77
&gt;&gt;      template&lt;typename X, typename Y&gt; GCReachableRef(const GCReachableRef&lt;X, Y&gt;&amp; other) = delete;
&gt; 
&gt; It doesn&apos;t makes sense that we would have to delete this function template. Yes, we need to delete the automatically generated copy constructor, since the code it generates would be incorrect, but this copy-constructor-like function template should *not* be automatically generated so it should not need to be deleted.
&gt; 
&gt; The same logic applies in the Ref class. I have no idea why the copy-constructor-like and assignment-operator-like template functions need to be deleted in that class. I believe those lines of code in Ref.h have no effect and are unnecessary.
&gt; 
&gt; When GCReachableRef was using a Ref for a member, though, we did *not* need to delete its copy constructor, the Ref member already prevented it from being generated. But now that we are using RefPtr instead, we need to prevent the automatic generation of the copy constructor and copy assignment operator either directly with delete or indirectly by defining the move constructor and move assignment operator.
&gt; 
&gt; So this line should go. And we have additional work to do to make sure we don’t automatically generate an incorrect copy constructor and assignment operator.

Hm... I don&apos;t quite follow what you&apos;re saying here.
Isn&apos;t this the line to prevent generating an incorrect copy constructor??

&gt;&gt; Source/WebCore/dom/GCReachableRef.h:80
&gt;&gt; +    T* ptr() const RETURNS_NONNULL { ASSERT(m_ptr); return m_ptr.get(); }
&gt; 
&gt; Would be nice to not have to write out the assertion. Maybe just call &amp;get() in these functions?

Sure, will do.

&gt;&gt; Source/WebCore/dom/GCReachableRef.h:83
&gt;&gt; +    bool operator!() const { ASSERT(m_ptr); return !*m_ptr; }
&gt; 
&gt; RefPtr::operator* already asserts, so there is no need for additional assertion here

Sure, will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464912</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-10-01 00:28:17 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #10)
&gt; Hm... I can still reproduce the stall at r236511 but whatever causing it is to
&gt; do with WebKitTestRunner or run-webkit-tests. Weirdly, specifying --time-out-ms=3000
&gt; would cause the tests to timeout less frequently despite of the fact none of the
&gt; tests are timing out.

Could you please file a new bug with steps to reproduce? I don&apos;t understand what you are describing in these comments.

&gt; Man... our testing infrastructure isn&apos;t in a good shape lately. iOS EWS is still suffering from the same data migration issue:
&gt; 
&gt; RuntimeError raised: Timed out while waiting for data migration

As you know, we just upgraded EWS to new major version of iOS SDK. It will take some tweaking to work around changed performance characteristics of the simulator. Either way, EWS eventually passed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465054</commentid>
    <comment_count>16</comment_count>
      <attachid>351200</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-10-01 09:58:43 -0700</bug_when>
    <thetext>Comment on attachment 351200
Fixes the bug

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

&gt;&gt;&gt; Source/WebCore/dom/GCReachableRef.h:77
&gt;&gt;&gt;      template&lt;typename X, typename Y&gt; GCReachableRef(const GCReachableRef&lt;X, Y&gt;&amp; other) = delete;
&gt;&gt; 
&gt;&gt; It doesn&apos;t makes sense that we would have to delete this function template. Yes, we need to delete the automatically generated copy constructor, since the code it generates would be incorrect, but this copy-constructor-like function template should *not* be automatically generated so it should not need to be deleted.
&gt;&gt; 
&gt;&gt; The same logic applies in the Ref class. I have no idea why the copy-constructor-like and assignment-operator-like template functions need to be deleted in that class. I believe those lines of code in Ref.h have no effect and are unnecessary.
&gt;&gt; 
&gt;&gt; When GCReachableRef was using a Ref for a member, though, we did *not* need to delete its copy constructor, the Ref member already prevented it from being generated. But now that we are using RefPtr instead, we need to prevent the automatic generation of the copy constructor and copy assignment operator either directly with delete or indirectly by defining the move constructor and move assignment operator.
&gt;&gt; 
&gt;&gt; So this line should go. And we have additional work to do to make sure we don’t automatically generate an incorrect copy constructor and assignment operator.
&gt; 
&gt; Hm... I don&apos;t quite follow what you&apos;re saying here.
&gt; Isn&apos;t this the line to prevent generating an incorrect copy constructor??

No. A template function like this, that is similar to the copy constructor and seems to cover a cast like it, will not prevent the language/compiler from generating the implicitly-declared and implicitly-defined copy constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465238</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-01 14:37:39 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #16)
&gt; Comment on attachment 351200 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351200&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/dom/GCReachableRef.h:77
&gt; &gt;&gt;&gt;      template&lt;typename X, typename Y&gt; GCReachableRef(const GCReachableRef&lt;X, Y&gt;&amp; other) = delete;
&gt; &gt;&gt; 
&gt; &gt;&gt; It doesn&apos;t makes sense that we would have to delete this function template. Yes, we need to delete the automatically generated copy constructor, since the code it generates would be incorrect, but this copy-constructor-like function template should *not* be automatically generated so it should not need to be deleted.
&gt; &gt;&gt; 
&gt; &gt;&gt; The same logic applies in the Ref class. I have no idea why the copy-constructor-like and assignment-operator-like template functions need to be deleted in that class. I believe those lines of code in Ref.h have no effect and are unnecessary.
&gt; &gt;&gt; 
&gt; &gt;&gt; When GCReachableRef was using a Ref for a member, though, we did *not* need to delete its copy constructor, the Ref member already prevented it from being generated. But now that we are using RefPtr instead, we need to prevent the automatic generation of the copy constructor and copy assignment operator either directly with delete or indirectly by defining the move constructor and move assignment operator.
&gt; &gt;&gt; 
&gt; &gt;&gt; So this line should go. And we have additional work to do to make sure we don’t automatically generate an incorrect copy constructor and assignment operator.
&gt; &gt; 
&gt; &gt; Hm... I don&apos;t quite follow what you&apos;re saying here.
&gt; &gt; Isn&apos;t this the line to prevent generating an incorrect copy constructor??
&gt; 
&gt; No. A template function like this, that is similar to the copy constructor
&gt; and seems to cover a cast like it, will not prevent the language/compiler
&gt; from generating the implicitly-declared and implicitly-defined copy
&gt; constructor.

Oh, I see. Thanks for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465252</commentid>
    <comment_count>18</comment_count>
      <attachid>351200</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-01 14:50:19 -0700</bug_when>
    <thetext>Comment on attachment 351200
Fixes the bug

I just noticed that GCReachableRef already uses WTF_MAKE_NONCOPYABLE so we just need to delete:
template&lt;typename X, typename Y&gt; GCReachableRef(const GCReachableRef&lt;X, Y&gt;&amp; other) = delete;
We don&apos;t need to add new code to prevent copy constructor and operator=.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465256</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-01 14:53:38 -0700</bug_when>
    <thetext>Committed r236693: &lt;https://trac.webkit.org/changeset/236693&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465373</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-01 19:59:53 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #15)
&gt; (In reply to Ryosuke Niwa from comment #10)
&gt; &gt; Hm... I can still reproduce the stall at r236511 but whatever causing it is to
&gt; &gt; do with WebKitTestRunner or run-webkit-tests. Weirdly, specifying --time-out-ms=3000
&gt; &gt; would cause the tests to timeout less frequently despite of the fact none of the
&gt; &gt; tests are timing out.
&gt; 
&gt; Could you please file a new bug with steps to reproduce? I don&apos;t understand
&gt; what you are describing in these comments.

This is very strange but I can&apos;t reproduce these timeouts with trunk WebKit anymore. Maybe it was a temporary issue which existed at the revision I was testing.

&gt; &gt; Man... our testing infrastructure isn&apos;t in a good shape lately. iOS EWS is still suffering from the same data migration issue:
&gt; &gt; 
&gt; &gt; RuntimeError raised: Timed out while waiting for data migration
&gt; 
&gt; As you know, we just upgraded EWS to new major version of iOS SDK. It will
&gt; take some tweaking to work around changed performance characteristics of the
&gt; simulator. Either way, EWS eventually passed.

Yeah, I understand. I wasn&apos;t trying to blame anyone.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351200</attachid>
            <date>2018-09-29 15:14:46 -0700</date>
            <delta_ts>2018-09-30 20:52:51 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-190113-20180929151446.patch</filename>
            <type>text/plain</type>
            <size>3335</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE4LTA5LTI5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFTQU4gZmFpbHVyZSBpbiB+R0NS
ZWFjaGFibGVSZWYoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkwMTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IH5HQ1JlYWNoYWJsZVJlZiBhY2Nlc3NpbmcgUmVm
IGFmdGVyIGl0IGhhZCBiZWVuIHBvaXNvbmVkIGZvciBBU0FOCisgICAgICAgIGluIFJlZjo6bGVh
a1JlZiB2aWEgUmVmKFJlZiYmIG90aGVyKS4gRml4ZWQgdGhlIGJ1ZyBieSB1c2luZyBSZWZQdHIg
aW5zdGVhZCBzaW5jZSB0aGF0J3MKKyAgICAgICAgdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGhlcmUg
YWx0aG91Z2ggd2UgY291bGQgdW5wb2lzb24gUmVmIHRlbXBvcmFyaWx5IGFzIGRvbmUgaW4gflJl
Zi4KKworICAgICAgICAqIGRvbS9HQ1JlYWNoYWJsZVJlZi5oOgorICAgICAgICAoV2ViQ29yZTo6
R0NSZWFjaGFibGVSZWY6OkdDUmVhY2hhYmxlUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkdDUmVh
Y2hhYmxlUmVmOjp+R0NSZWFjaGFibGVSZWYpOgorICAgICAgICAoV2ViQ29yZTo6R0NSZWFjaGFi
bGVSZWY6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R0NSZWFjaGFibGVS
ZWY6OmdldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjo6b3BlcmF0
b3IgVCYgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R0NSZWFjaGFibGVSZWY6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjo6aXNOdWxsIGNvbnN0
KTogRGVsZXRlZC4KKwogMjAxOC0wOS0yOSAgT3Jpb2wgQnJ1ZmF1ICA8b2JydWZhdUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtjc3MtZ3JpZF0gUHJvcGVybHkgYWxpZ24gaXRlbXMgbmV4dCB0byBj
b2xsYXBzZWQgdHJhY2tzIHdpdGggZ3V0dGVycwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0dD
UmVhY2hhYmxlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0dDUmVhY2hh
YmxlUmVmLmgJKHJldmlzaW9uIDIzNjY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9HQ1JlYWNo
YWJsZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw0MiArNTAsNDEgQEAgcHVibGljOgogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxO
b2RlLCBUPjo6dmFsdWU+PgogICAgIEdDUmVhY2hhYmxlUmVmKFQmIG9iamVjdCkKLSAgICAgICAg
OiBtX3JlZihvYmplY3QpCisgICAgICAgIDogbV9wdHIoJm9iamVjdCkKICAgICB7Ci0gICAgICAg
IEdDUmVhY2hhYmxlUmVmTWFwOjphZGQobV9yZWYuZ2V0KCkpOworICAgICAgICBHQ1JlYWNoYWJs
ZVJlZk1hcDo6YWRkKCptX3B0cik7CiAgICAgfQogCiAgICAgfkdDUmVhY2hhYmxlUmVmKCkKICAg
ICB7Ci0gICAgICAgIGlmICghaXNOdWxsKCkpCi0gICAgICAgICAgICBHQ1JlYWNoYWJsZVJlZk1h
cDo6cmVtb3ZlKG1fcmVmLmdldCgpKTsKKyAgICAgICAgaWYgKG1fcHRyKQorICAgICAgICAgICAg
R0NSZWFjaGFibGVSZWZNYXA6OnJlbW92ZSgqbV9wdHIpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFgsIHR5cGVuYW1lIFksIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX2Jhc2Vfb2Y8Tm9kZSwgVD46OnZhbHVlPj4KICAgICBHQ1JlYWNoYWJsZVJlZihSZWY8WCwg
WT4mJiBvdGhlcikKLSAgICAgICAgOiBtX3JlZihXVEZNb3ZlKG90aGVyLm1fcmVmKSkKKyAgICAg
ICAgOiBtX3B0cihXVEZNb3ZlKG90aGVyLm1fcHRyKSkKICAgICB7Ci0gICAgICAgIGlmICghaXNO
dWxsKCkpCi0gICAgICAgICAgICBHQ1JlYWNoYWJsZVJlZk1hcDo6YWRkKG1fcmVmLmdldCgpKTsK
KyAgICAgICAgaWYgKG1fcHRyKQorICAgICAgICAgICAgR0NSZWFjaGFibGVSZWZNYXA6OmFkZCgq
bV9wdHIpOwogICAgIH0KIAogICAgIEdDUmVhY2hhYmxlUmVmKEdDUmVhY2hhYmxlUmVmJiYgb3Ro
ZXIpCi0gICAgICAgIDogbV9yZWYoV1RGTW92ZShvdGhlci5tX3JlZikpCisgICAgICAgIDogbV9w
dHIoV1RGTW92ZShvdGhlci5tX3B0cikpCiAgICAgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+IEdDUmVhY2hhYmxlUmVmKGNvbnN0IEdDUmVhY2hhYmxlUmVm
PFgsIFk+JiBvdGhlcikgPSBkZWxldGU7CiAKLSAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBB
U1NFUlQoIWlzTnVsbCgpKTsgcmV0dXJuIG1fcmVmLnB0cigpOyB9Ci0gICAgVCogcHRyKCkgY29u
c3QgUkVUVVJOU19OT05OVUxMIHsgQVNTRVJUKCFpc051bGwoKSk7IHJldHVybiBtX3JlZi5wdHIo
KTsgfQotICAgIFQmIGdldCgpIGNvbnN0IHsgQVNTRVJUKCFpc051bGwoKSk7IHJldHVybiBtX3Jl
Zi5nZXQoKTsgfQotICAgIG9wZXJhdG9yIFQmKCkgY29uc3QgeyBBU1NFUlQoIWlzTnVsbCgpKTsg
cmV0dXJuIG1fcmVmLmdldCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IEFTU0VS
VCghaXNOdWxsKCkpOyByZXR1cm4gIW1fcmVmLmdldCgpOyB9CisgICAgVCogb3BlcmF0b3ItPigp
IGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuIG1fcHRyLmdldCgpOyB9CisgICAgVCogcHRy
KCkgY29uc3QgUkVUVVJOU19OT05OVUxMIHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuIG1fcHRyLmdl
dCgpOyB9CisgICAgVCYgZ2V0KCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRy
OyB9CisgICAgb3BlcmF0b3IgVCYoKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiAqbV9w
dHI7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJu
ICEqbV9wdHI7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVmLmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpOyB9CiAKLSAgICBSZWY8VD4gbV9yZWY7Cisg
ICAgUmVmUHRyPFQ+IG1fcHRyOwogfTsKIAogfQo=
</data>
<flag name="review"
          id="368552"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>