<?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>210995</bug_id>
          
          <creation_ts>2020-04-24 14:18:13 -0700</creation_ts>
          <short_desc>[WTF] allThreads registration is racy with allThreads unregistration</short_desc>
          <delta_ts>2020-04-24 16:56:46 -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>Web Template Framework</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1645391</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-24 14:18:13 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645405</commentid>
    <comment_count>1</comment_count>
      <attachid>397512</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-24 14:45:02 -0700</bug_when>
    <thetext>Created attachment 397512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645407</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-24 14:47:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/61609690&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645409</commentid>
    <comment_count>3</comment_count>
      <attachid>397513</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-24 14:50:42 -0700</bug_when>
    <thetext>Created attachment 397513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645413</commentid>
    <comment_count>4</comment_count>
      <attachid>397513</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-24 15:01:12 -0700</bug_when>
    <thetext>Comment on attachment 397513
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645414</commentid>
    <comment_count>5</comment_count>
      <attachid>397513</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-04-24 15:10:00 -0700</bug_when>
    <thetext>Comment on attachment 397513
Patch

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

r=me too.

&gt; Source/WTF/ChangeLog:15
&gt; +            5. Caller: Register the new thread to allThreads while it already finished its execution.

/Register/Registers/
/while/after/

&gt; Source/WTF/wtf/Threading.cpp:200
&gt; +    // However, it is also possible that the launched thread has been finished its execution before it is registered in allThreads here! In this case, the thread already

/has been finished/has finished/.
/thread already/thread has already/

&gt; Source/WTF/wtf/Threading.cpp:201
&gt; +    // called Thread::didExit to unregister itself from allThreads. Registering such a thread will register stale thread pointer to allThreads, which will not be removed

/register stale/register a stale/

&gt; Source/WTF/wtf/Threading.cpp:202
&gt; +    // even after Thread is destroyed. Register a thread only when it did not unregister itself from allThreads yet.

/when it did not unregister/when it has not unregistered/

&gt; Source/WTF/wtf/Threading.cpp:232
&gt; +        m_didUnregisterFromAllThreads = true;

Pity we can&apos;t use m_isShuttingDown.  So many flags to say the effectively / nearly the same thing:
    m_isShuttingDown, m_didExit, m_didUnregisterFromAllThreads

Maybe we can consider consolidating these later in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645444</commentid>
    <comment_count>6</comment_count>
      <attachid>397513</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-24 15:56:04 -0700</bug_when>
    <thetext>Comment on attachment 397513
Patch

crazy condition. LGTM too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645447</commentid>
    <comment_count>7</comment_count>
      <attachid>397513</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-24 15:57:14 -0700</bug_when>
    <thetext>Comment on attachment 397513
Patch

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

&gt;&gt; Source/WTF/ChangeLog:15
&gt;&gt; +            5. Caller: Register the new thread to allThreads while it already finished its execution.
&gt; 
&gt; /Register/Registers/
&gt; /while/after/

Fixed.

&gt;&gt; Source/WTF/wtf/Threading.cpp:200
&gt;&gt; +    // However, it is also possible that the launched thread has been finished its execution before it is registered in allThreads here! In this case, the thread already
&gt; 
&gt; /has been finished/has finished/.
&gt; /thread already/thread has already/

Fixed.

&gt;&gt; Source/WTF/wtf/Threading.cpp:201
&gt;&gt; +    // called Thread::didExit to unregister itself from allThreads. Registering such a thread will register stale thread pointer to allThreads, which will not be removed
&gt; 
&gt; /register stale/register a stale/

Fixed.

&gt;&gt; Source/WTF/wtf/Threading.cpp:202
&gt;&gt; +    // even after Thread is destroyed. Register a thread only when it did not unregister itself from allThreads yet.
&gt; 
&gt; /when it did not unregister/when it has not unregistered/

Fixed.

&gt; Source/WTF/wtf/Threading.h:315
&gt; +    bool m_didUnregisterFromAllThreads : 1;

For now, I&apos;ll make this as separate bool flag since this is guarded bool which can be modified by multiple threads with mutex-guards, while the other bitflags are not guarded by this same mutex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645455</commentid>
    <comment_count>8</comment_count>
      <attachid>397513</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-24 16:03:12 -0700</bug_when>
    <thetext>Comment on attachment 397513
Patch

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

&gt;&gt; Source/WTF/wtf/Threading.cpp:232
&gt;&gt; +        m_didUnregisterFromAllThreads = true;
&gt; 
&gt; Pity we can&apos;t use m_isShuttingDown.  So many flags to say the effectively / nearly the same thing:
&gt;     m_isShuttingDown, m_didExit, m_didUnregisterFromAllThreads
&gt; 
&gt; Maybe we can consider consolidating these later in another patch.

Not sure we can do that. They are because of complex mutex interactions &amp; ThreadGroup unregistrations...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645470</commentid>
    <comment_count>9</comment_count>
      <attachid>397513</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-04-24 16:27:11 -0700</bug_when>
    <thetext>Comment on attachment 397513
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/Threading.cpp:232
&gt;&gt;&gt; +        m_didUnregisterFromAllThreads = true;
&gt;&gt; 
&gt;&gt; Pity we can&apos;t use m_isShuttingDown.  So many flags to say the effectively / nearly the same thing:
&gt;&gt;     m_isShuttingDown, m_didExit, m_didUnregisterFromAllThreads
&gt;&gt; 
&gt;&gt; Maybe we can consider consolidating these later in another patch.
&gt; 
&gt; Not sure we can do that. They are because of complex mutex interactions &amp; ThreadGroup unregistrations...

I agree that it may not be possible, or even if possible, may not be desirable.  Perhaps the fields can be named something better.  It&apos;s not super important for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645482</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-24 16:56:46 -0700</bug_when>
    <thetext>Committed r260682: &lt;https://trac.webkit.org/changeset/260682&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397512</attachid>
            <date>2020-04-24 14:45:02 -0700</date>
            <delta_ts>2020-04-24 14:50:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210995-20200424144502.patch</filename>
            <type>text/plain</type>
            <size>6121</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEyZDM0ODA3NzdmMTQ3YjM4YjlhMmUw
NGZmZDMzMWQxMzlkMTVlMDMuLjdmNDZlY2IzZWZkNmM0MGVmZDdhYzY5ZjYzNThiYmRkMzczZjMz
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjAtMDQtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBhbGxUaHJlYWRzIHJlZ2lzdHJhdGlvbiBp
cyByYWN5IHdpdGggYWxsVGhyZWFkcyB1bnJlZ2lzdHJhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTk1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82MTYwOTY5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGVyZSBpcyBhIHJhY2UgYmV0d2VlbiByZWdpc3RlcmluZyBhIHRocmVhZCB0byBh
bGxUaHJlYWRzIGFuZCB1bnJlZ2lzdGVyaW5nIGEgdGhyZWFkIGZyb20gYWxsVGhyZWFkcy4KKwor
ICAgICAgICAgICAgMS4gQ2FsbGVyOiBBIG5ldyB0aHJlYWQgaXMgY3JlYXRlZCwgYnV0IG5vdCBy
ZWdpc3RlcmluZyBpdCB0byBhbGxUaHJlYWRzIHlldC4KKyAgICAgICAgICAgIDIuIFRocmVhZDog
VGhlIHRocmVhZCBpcyBydW5uaW5nLgorICAgICAgICAgICAgMy4gVGhyZWFkOiBUaGUgdGhyZWFk
IGZpbmlzaGVzIGl0cyBleGVjdXRpb24gYmVmb3JlIHRoZSB0aHJlYWQgaXMgcmVnaXN0ZXJlZCBp
bnRvIGFsbFRocmVhZHMuCisgICAgICAgICAgICA0LiBUaHJlYWQ6IFRoZSB0aHJlYWQgdW5yZWdp
c3RlcnMgaXRzZWxmIGZyb20gYWxsVGhyZWFkcy4KKyAgICAgICAgICAgIDUuIENhbGxlcjogUmVn
aXN0ZXIgdGhlIG5ldyB0aHJlYWQgdG8gYWxsVGhyZWFkcyB3aGlsZSBpdCBhbHJlYWR5IGZpbmlz
aGVkIGl0cyBleGVjdXRpb24uCisgICAgICAgICAgICA2LiBUaGUgdGhyZWFkIGlzIG5ldmVyIHJl
bW92ZWQgZnJvbSBhbGxUaHJlYWRzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBtX2RpZFVu
cmVnaXN0ZXJGcm9tQWxsVGhyZWFkcyBmbGFnIHRvIFRocmVhZCwgYW5kIGFkZCB0aGUgdGhyZWFk
IHRvIGFsbFRocmVhZHMgb25seSB3aGVuIHRoaXMgZmxhZyBpcyBmYWxzZS4KKworICAgICAgICAq
IHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFsbFRocmVhZHNNdXRl
eCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpkaWRFeGl0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6VGhyZWFkKToKKwogMjAyMC0wNC0yNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBs
ZS5jb20+IGFuZCBMdW1pbmcgWWluIDxsdW1pbmdfeWluQGFwcGxlLmNvbT4KIAogICAgICAgICBD
YWxsIFNURHluYW1pY0FjdGl2aXR5QXR0cmlidXRpb25QdWJsaXNoZXIgaW4gdGhlIFdlYlByb2Nl
c3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA2YTNhODIxMjlhYWJlNmU0YzdjMDQ0OTBhMWRlZjFhYWExOWZjZWZk
Li43ZjZhMzBmYTY5NmQ0NWJlZTBmODkzMDA3NzA4Y2FkMTA3ODZiNDM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMjAtMDQtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KKworICAgICAgICBbV1RGXSBhbGxUaHJlYWRzIHJlZ2lzdHJhdGlvbiBpcyByYWN5IHdp
dGggYWxsVGhyZWFkcyB1bnJlZ2lzdHJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBw
YWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlVXNhZ2VUaHJlYWQ6OnBsYXRmb3JtQ29sbGVjdENQVURhdGEpOgorCiAyMDIwLTA0
LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQVNTRVJUSU9O
IEZBSUxFRDogbV93cmFwcGVyIHVuZGVyIEhUTUxNZWRpYUVsZW1lbnQ6OnNldElzUGxheWluZ1Rv
V2lyZWxlc3NUYXJnZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmluZGV4IDE5MjZiMDZlNzZlYWY4NTU2NDNl
YWNiNWQyNjhkM2RiODM1NmU3ODEuLmIzNWY2ZDIzNGZlZDIzNWRiMzI4MzEzYzg4MzdiNTkzMmI4
MmRiYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtOTIsMTAgKzkyLDEwIEBAIEhhc2hTZXQ8VGhy
ZWFkKj4mIFRocmVhZDo6YWxsVGhyZWFkcyhjb25zdCBMb2NrSG9sZGVyJikKICAgICByZXR1cm4g
YWxsVGhyZWFkczsKIH0KIAorc3RhdGljIExvY2sgYWxsVGhyZWFkc011dGV4SW1wbDsKIExvY2sm
IFRocmVhZDo6YWxsVGhyZWFkc011dGV4KCkKIHsKLSAgICBzdGF0aWMgTG9jayBtdXRleDsKLSAg
ICByZXR1cm4gbXV0ZXg7CisgICAgcmV0dXJuIGFsbFRocmVhZHNNdXRleEltcGw7CiB9CiAKIGNv
bnN0IGNoYXIqIFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWRO
YW1lKQpAQCAtMTk2LDkgKzE5NiwxNCBAQCBSZWY8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShjb25z
dCBjaGFyKiBuYW1lLCBGdW5jdGlvbjx2b2lkKCk+JiYgZW50cnlQb2ludCwgVGhyZQogI2VuZGlm
CiAgICAgfQogCisgICAgLy8gV2UgbXVzdCByZWdpc3RlciB0aHJlYWRzIGhlcmUgc2luY2UgdGhy
ZWFkcyByZWdpc3RlcmVkIGluIGFsbFRocmVhZHMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgY29tcGxl
dGUgdGhyZWFkIGRhdGEgd2hpY2ggY2FuIGJlIGluaXRpYWxpemVkIGluIGxhdW5jaGVkIHRocmVh
ZCBzaWRlLgorICAgIC8vIEhvd2V2ZXIsIGl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB0aGUgbGF1
bmNoZWQgdGhyZWFkIGhhcyBiZWVuIGZpbmlzaGVkIGl0cyBleGVjdXRpb24gYmVmb3JlIGl0IGlz
IHJlZ2lzdGVyZWQgaW4gYWxsVGhyZWFkcyBoZXJlISBJbiB0aGlzIGNhc2UsIHRoZSB0aHJlYWQg
YWxyZWFkeQorICAgIC8vIGNhbGxlZCBUaHJlYWQ6OmRpZEV4aXQgdG8gdW5yZWdpc3RlciBpdHNl
bGYgZnJvbSBhbGxUaHJlYWRzLiBSZWdpc3RlcmluZyBzdWNoIGEgdGhyZWFkIHdpbGwgcmVnaXN0
ZXIgc3RhbGUgdGhyZWFkIHBvaW50ZXIgdG8gYWxsVGhyZWFkcywgd2hpY2ggd2lsbCBub3QgYmUg
cmVtb3ZlZAorICAgIC8vIGV2ZW4gYWZ0ZXIgVGhyZWFkIGlzIGRlc3Ryb3llZC4gUmVnaXN0ZXIg
YSB0aHJlYWQgb25seSB3aGVuIGl0IGRpZCBub3QgdW5yZWdpc3RlciBpdHNlbGYgZnJvbSBhbGxU
aHJlYWRzIHlldC4KICAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9jayhhbGxUaHJlYWRzTXV0
ZXgoKSk7Ci0gICAgICAgIGFsbFRocmVhZHMobG9jaykuYWRkKCZ0aHJlYWQuZ2V0KCkpOworICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGFsbFRocmVhZHNNdXRleCgpKTsKKyAgICAgICAg
aWYgKCF0aHJlYWQtPm1fZGlkVW5yZWdpc3RlckZyb21BbGxUaHJlYWRzKQorICAgICAgICAgICAg
YWxsVGhyZWFkcyhsb2NrZXIpLmFkZCh0aHJlYWQucHRyKCkpOwogICAgIH0KIAogICAgIEFTU0VS
VCghdGhyZWFkLT5zdGFjaygpLmlzRW1wdHkoKSk7CkBAIC0yMjIsOCArMjI3LDkgQEAgc3RhdGlj
IGJvb2wgc2hvdWxkUmVtb3ZlVGhyZWFkRnJvbVRocmVhZEdyb3VwKCkKIHZvaWQgVGhyZWFkOjpk
aWRFeGl0KCkKIHsKICAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9jayhhbGxUaHJlYWRzTXV0
ZXgoKSk7Ci0gICAgICAgIGFsbFRocmVhZHMobG9jaykucmVtb3ZlKHRoaXMpOworICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGFsbFRocmVhZHNNdXRleCgpKTsKKyAgICAgICAgYWxsVGhy
ZWFkcyhsb2NrZXIpLnJlbW92ZSh0aGlzKTsKKyAgICAgICAgbV9kaWRVbnJlZ2lzdGVyRnJvbUFs
bFRocmVhZHMgPSB0cnVlOwogICAgIH0KIAogICAgIGlmIChzaG91bGRSZW1vdmVUaHJlYWRGcm9t
VGhyZWFkR3JvdXAoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBjZTNiZjA2ODMwYTZkOTdhNDliNzhk
OWM3NDVhODYzMjA5YzhlYmQ3Li4yMjc0MGJlYjYxOGVkMzg1ZGZkMDQyNDU0OTE5MGZiOTMzZjJl
OThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMzEyLDYgKzMxMiw3IEBAIGNsYXNzIFRocmVhZCA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKICAgICBKb2luYWJsZVN0YXRlIG1f
am9pbmFibGVTdGF0ZSB7IEpvaW5hYmxlIH07CiAgICAgYm9vbCBtX2lzU2h1dHRpbmdEb3duIDog
MTsKICAgICBib29sIG1fZGlkRXhpdCA6IDE7CisgICAgYm9vbCBtX2RpZFVucmVnaXN0ZXJGcm9t
QWxsVGhyZWFkcyA6IDE7CiAgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZSA6IDE7CiAgICAgYm9v
bCBtX2lzQ29tcGlsYXRpb25UaHJlYWQ6IDE7CiAgICAgdW5zaWduZWQgbV9nY1RocmVhZFR5cGUg
OiAyOwpAQCAtMzUwLDYgKzM1MSw3IEBAIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxUaHJlYWQ+IHsKIGlubGluZSBUaHJlYWQ6OlRocmVhZCgpCiAgICAgOiBtX2lz
U2h1dHRpbmdEb3duKGZhbHNlKQogICAgICwgbV9kaWRFeGl0KGZhbHNlKQorICAgICwgbV9kaWRV
bnJlZ2lzdGVyRnJvbUFsbFRocmVhZHMoZmFsc2UpCiAgICAgLCBtX2lzRGVzdHJveWVkT25jZShm
YWxzZSkKICAgICAsIG1faXNDb21waWxhdGlvblRocmVhZChmYWxzZSkKICAgICAsIG1fZ2NUaHJl
YWRUeXBlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihHQ1RocmVhZFR5cGU6Ok5vbmUpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5t
bQppbmRleCBiYzYyZTlmZjVjOGFiM2VjMTFiOWY1NDhmOWFiMTBjMTVlYTE0NzY3Li5iZDBjMTdm
NTA3ZmE5MzFiNDYwNWY0ZGNkZmQ4NGQ5NjQxYTJhMjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQpAQCAtMTU2LDgg
KzE1Niw4IEBAIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6cGxhdGZvcm1Db2xsZWN0Q1BVRGF0
YShKU0M6OlZNKiwgUmVzb3VyY2VVc2FnZURhdGEmIGRhCiAKICAgICBIYXNoU2V0PG1hY2hfcG9y
dF90PiBrbm93bldlYktpdFRocmVhZHM7CiAgICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2so
VGhyZWFkOjphbGxUaHJlYWRzTXV0ZXgoKSk7Ci0gICAgICAgIGZvciAoYXV0byogdGhyZWFkIDog
VGhyZWFkOjphbGxUaHJlYWRzKGxvY2spKSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soVGhyZWFkOjphbGxUaHJlYWRzTXV0ZXgoKSk7CisgICAgICAgIGZvciAoYXV0byogdGhyZWFk
IDogVGhyZWFkOjphbGxUaHJlYWRzKGxvY2tlcikpIHsKICAgICAgICAgICAgIG1hY2hfcG9ydF90
IG1hY2hUaHJlYWQgPSB0aHJlYWQtPm1hY2hUaHJlYWQoKTsKICAgICAgICAgICAgIGlmIChtYWNo
VGhyZWFkICE9IE1BQ0hfUE9SVF9OVUxMKQogICAgICAgICAgICAgICAgIGtub3duV2ViS2l0VGhy
ZWFkcy5hZGQobWFjaFRocmVhZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397513</attachid>
            <date>2020-04-24 14:50:42 -0700</date>
            <delta_ts>2020-04-24 15:01:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210995-20200424145041.patch</filename>
            <type>text/plain</type>
            <size>5832</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEyZDM0ODA3NzdmMTQ3YjM4YjlhMmUw
NGZmZDMzMWQxMzlkMTVlMDMuLjE0YWIzODEyN2Q5ZTQ2YTQ5MzNiZWQ1OTE2Y2Q3ODhlM2ZkMDI4
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMjAtMDQtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBhbGxUaHJlYWRzIHJlZ2lzdHJhdGlvbiBp
cyByYWN5IHdpdGggYWxsVGhyZWFkcyB1bnJlZ2lzdHJhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTk1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82MTYwOTY5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGVyZSBpcyBhIHJhY2UgYmV0d2VlbiByZWdpc3RlcmluZyBhIHRocmVhZCB0byBh
bGxUaHJlYWRzIGFuZCB1bnJlZ2lzdGVyaW5nIGEgdGhyZWFkIGZyb20gYWxsVGhyZWFkcy4KKwor
ICAgICAgICAgICAgMS4gQ2FsbGVyOiBBIG5ldyB0aHJlYWQgaXMgY3JlYXRlZCwgYnV0IG5vdCBy
ZWdpc3RlcmluZyBpdCB0byBhbGxUaHJlYWRzIHlldC4KKyAgICAgICAgICAgIDIuIFRocmVhZDog
VGhlIHRocmVhZCBpcyBydW5uaW5nLgorICAgICAgICAgICAgMy4gVGhyZWFkOiBUaGUgdGhyZWFk
IGZpbmlzaGVzIGl0cyBleGVjdXRpb24gYmVmb3JlIHRoZSB0aHJlYWQgaXMgcmVnaXN0ZXJlZCBp
bnRvIGFsbFRocmVhZHMuCisgICAgICAgICAgICA0LiBUaHJlYWQ6IFRoZSB0aHJlYWQgdW5yZWdp
c3RlcnMgaXRzZWxmIGZyb20gYWxsVGhyZWFkcy4KKyAgICAgICAgICAgIDUuIENhbGxlcjogUmVn
aXN0ZXIgdGhlIG5ldyB0aHJlYWQgdG8gYWxsVGhyZWFkcyB3aGlsZSBpdCBhbHJlYWR5IGZpbmlz
aGVkIGl0cyBleGVjdXRpb24uCisgICAgICAgICAgICA2LiBUaGUgdGhyZWFkIGlzIG5ldmVyIHJl
bW92ZWQgZnJvbSBhbGxUaHJlYWRzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBtX2RpZFVu
cmVnaXN0ZXJGcm9tQWxsVGhyZWFkcyBmbGFnIHRvIFRocmVhZCwgYW5kIGFkZCB0aGUgdGhyZWFk
IHRvIGFsbFRocmVhZHMgb25seSB3aGVuIHRoaXMgZmxhZyBpcyBmYWxzZS4KKworICAgICAgICBD
b3ZlcmVkIGJ5IExheW91dFRlc3RzL2luc3BlY3Rvci9jcHUtcHJvZmlsZXIvdGhyZWFkcy5odG1s
LgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKiB3dGYv
VGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6VGhyZWFkKToKKwogMjAyMC0wNC0y
NCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+IGFuZCBMdW1pbmcgWWluIDxsdW1p
bmdfeWluQGFwcGxlLmNvbT4KIAogICAgICAgICBDYWxsIFNURHluYW1pY0FjdGl2aXR5QXR0cmli
dXRpb25QdWJsaXNoZXIgaW4gdGhlIFdlYlByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2YTNhODIxMjlh
YWJlNmU0YzdjMDQ0OTBhMWRlZjFhYWExOWZjZWZkLi5hMTkwZDg1YTNhOTAxNmIzM2Y2ODM1M2Y5
ZGM2YWI0M2M2M2IzNzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMjQg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBhbGxU
aHJlYWRzIHJlZ2lzdHJhdGlvbiBpcyByYWN5IHdpdGggYWxsVGhyZWFkcyB1bnJlZ2lzdHJhdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTk1
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MTYwOTY5MD4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRo
cmVhZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6cGxh
dGZvcm1Db2xsZWN0Q1BVRGF0YSk6CisKIDIwMjAtMDQtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBtX3dyYXBwZXIgdW5kZXIg
SFRNTE1lZGlhRWxlbWVudDo6c2V0SXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5jcHAKaW5kZXggMTkyNmIwNmU3NmVhZjg1NTY0M2VhY2I1ZDI2OGQzZGI4MzU2ZTc4MS4uODAw
YWRhYzcyY2RhYzBkM2YwZThiOTkxMDZhY2M4MGQ1Yzk3NDhjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3Bw
CkBAIC0xOTYsOSArMTk2LDE0IEBAIFJlZjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNo
YXIqIG5hbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBlbnRyeVBvaW50LCBUaHJlCiAjZW5kaWYKICAg
ICB9CiAKKyAgICAvLyBXZSBtdXN0IHJlZ2lzdGVyIHRocmVhZHMgaGVyZSBzaW5jZSB0aHJlYWRz
IHJlZ2lzdGVyZWQgaW4gYWxsVGhyZWFkcyBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBjb21wbGV0ZSB0
aHJlYWQgZGF0YSB3aGljaCBjYW4gYmUgaW5pdGlhbGl6ZWQgaW4gbGF1bmNoZWQgdGhyZWFkIHNp
ZGUuCisgICAgLy8gSG93ZXZlciwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZSBsYXVuY2hl
ZCB0aHJlYWQgaGFzIGJlZW4gZmluaXNoZWQgaXRzIGV4ZWN1dGlvbiBiZWZvcmUgaXQgaXMgcmVn
aXN0ZXJlZCBpbiBhbGxUaHJlYWRzIGhlcmUhIEluIHRoaXMgY2FzZSwgdGhlIHRocmVhZCBhbHJl
YWR5CisgICAgLy8gY2FsbGVkIFRocmVhZDo6ZGlkRXhpdCB0byB1bnJlZ2lzdGVyIGl0c2VsZiBm
cm9tIGFsbFRocmVhZHMuIFJlZ2lzdGVyaW5nIHN1Y2ggYSB0aHJlYWQgd2lsbCByZWdpc3RlciBz
dGFsZSB0aHJlYWQgcG9pbnRlciB0byBhbGxUaHJlYWRzLCB3aGljaCB3aWxsIG5vdCBiZSByZW1v
dmVkCisgICAgLy8gZXZlbiBhZnRlciBUaHJlYWQgaXMgZGVzdHJveWVkLiBSZWdpc3RlciBhIHRo
cmVhZCBvbmx5IHdoZW4gaXQgZGlkIG5vdCB1bnJlZ2lzdGVyIGl0c2VsZiBmcm9tIGFsbFRocmVh
ZHMgeWV0LgogICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKGFsbFRocmVhZHNNdXRleCgp
KTsKLSAgICAgICAgYWxsVGhyZWFkcyhsb2NrKS5hZGQoJnRocmVhZC5nZXQoKSk7CisgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soYWxsVGhyZWFkc011dGV4KCkpOworICAgICAgICBpZiAo
IXRocmVhZC0+bV9kaWRVbnJlZ2lzdGVyRnJvbUFsbFRocmVhZHMpCisgICAgICAgICAgICBhbGxU
aHJlYWRzKGxvY2tlcikuYWRkKHRocmVhZC5wdHIoKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCF0
aHJlYWQtPnN0YWNrKCkuaXNFbXB0eSgpKTsKQEAgLTIyMiw4ICsyMjcsOSBAQCBzdGF0aWMgYm9v
bCBzaG91bGRSZW1vdmVUaHJlYWRGcm9tVGhyZWFkR3JvdXAoKQogdm9pZCBUaHJlYWQ6OmRpZEV4
aXQoKQogewogICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKGFsbFRocmVhZHNNdXRleCgp
KTsKLSAgICAgICAgYWxsVGhyZWFkcyhsb2NrKS5yZW1vdmUodGhpcyk7CisgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2soYWxsVGhyZWFkc011dGV4KCkpOworICAgICAgICBhbGxUaHJlYWRz
KGxvY2tlcikucmVtb3ZlKHRoaXMpOworICAgICAgICBtX2RpZFVucmVnaXN0ZXJGcm9tQWxsVGhy
ZWFkcyA9IHRydWU7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFJlbW92ZVRocmVhZEZyb21UaHJl
YWRHcm91cCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IGNlM2JmMDY4MzBhNmQ5N2E0OWI3OGQ5Yzc0
NWE4NjMyMDljOGViZDcuLjIyNzQwYmViNjE4ZWQzODVkZmQwNDI0NTQ5MTkwZmI5MzNmMmU5OGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5oCkBAIC0zMTIsNiArMzEyLDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewogICAgIEpvaW5hYmxlU3RhdGUgbV9qb2lu
YWJsZVN0YXRlIHsgSm9pbmFibGUgfTsKICAgICBib29sIG1faXNTaHV0dGluZ0Rvd24gOiAxOwog
ICAgIGJvb2wgbV9kaWRFeGl0IDogMTsKKyAgICBib29sIG1fZGlkVW5yZWdpc3RlckZyb21BbGxU
aHJlYWRzIDogMTsKICAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlIDogMTsKICAgICBib29sIG1f
aXNDb21waWxhdGlvblRocmVhZDogMTsKICAgICB1bnNpZ25lZCBtX2djVGhyZWFkVHlwZSA6IDI7
CkBAIC0zNTAsNiArMzUxLDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFRocmVhZD4gewogaW5saW5lIFRocmVhZDo6VGhyZWFkKCkKICAgICA6IG1faXNTaHV0
dGluZ0Rvd24oZmFsc2UpCiAgICAgLCBtX2RpZEV4aXQoZmFsc2UpCisgICAgLCBtX2RpZFVucmVn
aXN0ZXJGcm9tQWxsVGhyZWFkcyhmYWxzZSkKICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNl
KQogICAgICwgbV9pc0NvbXBpbGF0aW9uVGhyZWFkKGZhbHNlKQogICAgICwgbV9nY1RocmVhZFR5
cGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdDVGhyZWFkVHlwZTo6Tm9uZSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCmlu
ZGV4IGJjNjJlOWZmNWM4YWIzZWMxMWI5ZjU0OGY5YWIxMGMxNWVhMTQ3NjcuLmJkMGMxN2Y1MDdm
YTkzMWI0NjA1ZjRkY2RmZDg0ZDk2NDFhMmEyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCkBAIC0xNTYsOCArMTU2
LDggQEAgdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpwbGF0Zm9ybUNvbGxlY3RDUFVEYXRhKEpT
Qzo6Vk0qLCBSZXNvdXJjZVVzYWdlRGF0YSYgZGEKIAogICAgIEhhc2hTZXQ8bWFjaF9wb3J0X3Q+
IGtub3duV2ViS2l0VGhyZWFkczsKICAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9jayhUaHJl
YWQ6OmFsbFRocmVhZHNNdXRleCgpKTsKLSAgICAgICAgZm9yIChhdXRvKiB0aHJlYWQgOiBUaHJl
YWQ6OmFsbFRocmVhZHMobG9jaykpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhU
aHJlYWQ6OmFsbFRocmVhZHNNdXRleCgpKTsKKyAgICAgICAgZm9yIChhdXRvKiB0aHJlYWQgOiBU
aHJlYWQ6OmFsbFRocmVhZHMobG9ja2VyKSkgewogICAgICAgICAgICAgbWFjaF9wb3J0X3QgbWFj
aFRocmVhZCA9IHRocmVhZC0+bWFjaFRocmVhZCgpOwogICAgICAgICAgICAgaWYgKG1hY2hUaHJl
YWQgIT0gTUFDSF9QT1JUX05VTEwpCiAgICAgICAgICAgICAgICAga25vd25XZWJLaXRUaHJlYWRz
LmFkZChtYWNoVGhyZWFkKTsK
</data>
<flag name="review"
          id="412908"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>