<?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>182474</bug_id>
          
          <creation_ts>2018-02-04 23:22:10 -0800</creation_ts>
          <short_desc>Multiple bmalloc scavenger threads is unexpected</short_desc>
          <delta_ts>2018-02-05 11:58:08 -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>bmalloc</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="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1396219</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-02-04 23:22:10 -0800</bug_when>
    <thetext>Multiple bmalloc scavenger threads is unexpected

Steps to reproduce:
1. Run with trunk
2. Load a webpage
3. `sample &lt;pid&gt;` the com.apple.WebKit.WebContent process
  =&gt; Multiple bmalloc Scavenger threads

Sample:
...
    830 Thread_242317
    + 830 thread_start  (in libsystem_pthread.dylib) + 13  [0x7fff636c3bf9]
    +   830 _pthread_start  (in libsystem_pthread.dylib) + 377  [0x7fff636c450d]
    +     830 _pthread_body  (in libsystem_pthread.dylib) + 340  [0x7fff636c4661]
    +       830 void* std::__1::__thread_proxy&lt;std::__1::tuple&lt;std::__1::unique_ptr&lt;std::__1::__thread_struct, std::__1::default_delete&lt;std::__1::__thread_struct&gt; &gt;, void (*)(bmalloc::Scavenger*), bmalloc::Scavenger*&gt; &gt;(void*)  (in JavaScriptCore) + 40  [0x7fff3e941b48]
    +         830 bmalloc::Scavenger::threadEntryPoint(bmalloc::Scavenger*)  (in JavaScriptCore) + 9  [0x7fff3e941809]
    +           830 bmalloc::Scavenger::threadRunLoop()  (in JavaScriptCore) + 251  [0x7fff3e941a0b]
    +             830 void std::__1::condition_variable_any::wait&lt;std::__1::unique_lock&lt;bmalloc::Mutex&gt; &gt;(std::__1::unique_lock&lt;bmalloc::Mutex&gt;&amp;)  (in JavaScriptCore) + 86  [0x7fff3e941d56]
    +               830 std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;)  (in libc++.1.dylib) + 18  [0x7fff61317cb0]
    +                 830 _pthread_cond_wait  (in libsystem_pthread.dylib) + 732  [0x7fff636c5589]
    +                   830 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff63508a1e]
...
    830 Thread_244724
    + 830 thread_start  (in libsystem_pthread.dylib) + 13  [0x7fff636c3bf9]
    +   830 _pthread_start  (in libsystem_pthread.dylib) + 377  [0x7fff636c450d]
    +     830 _pthread_body  (in libsystem_pthread.dylib) + 340  [0x7fff636c4661]
    +       830 void* std::__1::__thread_proxy&lt;std::__1::tuple&lt;std::__1::unique_ptr&lt;std::__1::__thread_struct, std::__1::default_delete&lt;std::__1::__thread_struct&gt; &gt;, void (*)(bmalloc::Scavenger*), bmalloc::Scavenger*&gt; &gt;(void*)  (in JavaScriptCore) + 40  [0x7fff3e941b48]
    +         830 bmalloc::Scavenger::threadEntryPoint(bmalloc::Scavenger*)  (in JavaScriptCore) + 9  [0x7fff3e941809]
    +           830 bmalloc::Scavenger::threadRunLoop()  (in JavaScriptCore) + 251  [0x7fff3e941a0b]
    +             830 void std::__1::condition_variable_any::wait&lt;std::__1::unique_lock&lt;bmalloc::Mutex&gt; &gt;(std::__1::unique_lock&lt;bmalloc::Mutex&gt;&amp;)  (in JavaScriptCore) + 86  [0x7fff3e941d56]
    +               830 std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;)  (in libc++.1.dylib) + 18  [0x7fff61317cb0]
    +                 830 _pthread_cond_wait  (in libsystem_pthread.dylib) + 732  [0x7fff636c5589]
    +                   830 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff63508a1e]

Notes:

- One is created via JavaScriptCore with PerProcess&lt;Scavenger&gt; for normal allocations

(lldb) bt
* thread #1, queue = &apos;com.apple.main-thread&apos;, stop reason = breakpoint 1.1
  * frame #0: 0x00007fff3e941810 JavaScriptCore`bmalloc::Scavenger::Scavenger(std::__1::lock_guard&lt;bmalloc::StaticMutex&gt;&amp;)
    frame #1: 0x00007fff3e70e198 JavaScriptCore`bmalloc::PerProcess&lt;bmalloc::Scavenger&gt;::getSlowCase() + 72
    frame #2: 0x00007fff3e946db4 JavaScriptCore`bmalloc::Heap::Heap(bmalloc::HeapKind, std::__1::lock_guard&lt;bmalloc::StaticMutex&gt;&amp;) + 1636
    ...

- Another is created later on via WebCore with PerProcess&lt;Scavenger&gt; for isoheap allocations

(lldb) bt
* thread #1, queue = &apos;com.apple.main-thread&apos;, stop reason = breakpoint 1.1
  * frame #0: 0x00007fff3e941810 JavaScriptCore`bmalloc::Scavenger::Scavenger(std::__1::lock_guard&lt;bmalloc::StaticMutex&gt;&amp;)
    frame #1: 0x00007fff4922da88 WebCore`bmalloc::PerProcess&lt;bmalloc::Scavenger&gt;::getSlowCase() + 72
    frame #2: 0x00007fff49374400 WebCore`bmalloc::IsoDirectory&lt;bmalloc::IsoConfig&lt;1184u&gt;, 32u&gt;::takeFirstEligible() + 80
    ...

It seems these should be the same instance, but were unexpectedly different instances.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396220</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-02-04 23:22:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/37175526&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396221</commentid>
    <comment_count>2</comment_count>
      <attachid>333062</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-02-04 23:28:38 -0800</bug_when>
    <thetext>Created attachment 333062
[PATCH] Proposed Fix

I didn&apos;t convert all PerProcess&lt;T&gt; =&gt; SafePerProcess&lt;T&gt; because it requires up-front knowledge of the type specializations. This falls over for IsoTLSDeallocatorEntry, which is constructed with many different configurations:

    IsoTLSDeallocatorEntry&lt;IsoConfig&lt;32&gt;&gt;
    IsoTLSDeallocatorEntry&lt;IsoConfig&lt;40&gt;&gt;
    IsoTLSDeallocatorEntry&lt;IsoConfig&lt;56&gt;&gt;
    IsoTLSDeallocatorEntry&lt;IsoConfig&lt;72&gt;&gt;
    IsoTLSDeallocatorEntry&lt;IsoConfig&lt;88&gt;&gt;
    IsoTLSDeallocatorEntry&lt;IsoConfig&lt;96&gt;&gt;
    IsoTLSDeallocatorEntry&lt;IsoConfig&lt;104&gt;&gt;
    IsoTLSDeallocatorEntry&lt;IsoConfig&lt;120&gt;&gt;
    ...

This also presents a case where there is another PerProcess&lt;T&gt; cross image issue. JavaScriptCore and WebCore each produce their own `IsoTLSDeallocatorEntry&lt;IsoConfig&lt;40&gt;&gt;` instance. So we may have to abandon the PerProcess&lt;T&gt; templated approach here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396223</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-02-04 23:31:03 -0800</bug_when>
    <thetext>&gt; This also presents a case where there is another PerProcess&lt;T&gt; cross image
&gt; issue. JavaScriptCore and WebCore each produce their own
&gt; `IsoTLSDeallocatorEntry&lt;IsoConfig&lt;40&gt;&gt;` instance. So we may have to abandon
&gt; the PerProcess&lt;T&gt; templated approach here.

Or someone can figure out how to somehow export the templated symbols. A few of us looked at this and couldn&apos;t figure out how to make it happen generically, and fell back to the duplicate class above which explicitly creates the symbols and exports them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396413</commentid>
    <comment_count>4</comment_count>
      <attachid>333062</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-05 11:18:49 -0800</bug_when>
    <thetext>Comment on attachment 333062
[PATCH] Proposed Fix

Clearing flags on attachment: 333062

Committed r228107: &lt;https://trac.webkit.org/changeset/228107&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396414</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-05 11:18:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396443</commentid>
    <comment_count>6</comment_count>
      <attachid>333062</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-05 11:47:51 -0800</bug_when>
    <thetext>Comment on attachment 333062
[PATCH] Proposed Fix

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

&gt; Source/bmalloc/bmalloc/PerProcess.h:41
&gt; +// WARNING: PerProcess&lt;T&gt; does not export its storage. So in actuality when

Maybe we should rename PerProcess?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396449</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-02-05 11:58:08 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #6)
&gt; Comment on attachment 333062 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333062&amp;action=review
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/PerProcess.h:41
&gt; &gt; +// WARNING: PerProcess&lt;T&gt; does not export its storage. So in actuality when
&gt; 
&gt; Maybe we should rename PerProcess?

Yeah, I think any follow-ups can/should happen with bug 182496.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333062</attachid>
            <date>2018-02-04 23:28:38 -0800</date>
            <delta_ts>2018-02-05 11:18:49 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>safe-1.patch</filename>
            <type>text/plain</type>
            <size>9652</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZyBiL1NvdXJjZS9ibWFsbG9jL0No
YW5nZUxvZwppbmRleCBmOTJlOWU1YzBhMy4uMjVmYTNlMjgwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9ibWFsbG9jL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNyBAQAorMjAxOC0wMi0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgorCisgICAgICAgIE11bHRpcGxlIGJtYWxsb2Mgc2NhdmVuZ2VyIHRocmVhZHMgaXMgdW5l
eHBlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTgyNDc0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNzE3NTUyNj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKiBibWFsbG9jL0lzb0RpcmVj
dG9yeUlubGluZXMuaDoKKyAgICAgICAgKGJtYWxsb2M6OnBhc3NlZE51bVBhZ2VzPjo6dGFrZUZp
cnN0RWxpZ2libGUpOgorICAgICAgICAoYm1hbGxvYzo6cGFzc2VkTnVtUGFnZXM+OjpkaWRCZWNv
bWUpOgorICAgICAgICAqIGJtYWxsb2MvYm1hbGxvYy5jcHA6CisgICAgICAgIChibWFsbG9jOjph
cGk6OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6c2V0U2NhdmVuZ2VyVGhyZWFk
UU9TQ2xhc3MpOgorICAgICAgICBTd2l0Y2ggdG8gU2FmZVBlclByb2Nlc3MgZm9yIFNjYXZlbmdl
ciB0byBlbnN1cmUgb25lIGluc3RhbmNlCisgICAgICAgIGZvciB0aGUgZW50aXJlIHByb2Nlc3Mu
CisKKyAgICAgICAgKiBibWFsbG9jL1BlclByb2Nlc3MuaDoKKyAgICAgICAgKGJtYWxsb2M6OlBl
clByb2Nlc3M6OmdldCk6CisgICAgICAgIChibWFsbG9jOjpQZXJQcm9jZXNzOjpnZXRGYXN0Q2Fz
ZSk6CisgICAgICAgIChibWFsbG9jOjpQZXJQcm9jZXNzOjpnZXRTbG93Q2FzZSk6CisgICAgICAg
IChibWFsbG9jOjpTYWZlUGVyUHJvY2Vzczo6Z2V0KToKKyAgICAgICAgKGJtYWxsb2M6OlNhZmVQ
ZXJQcm9jZXNzOjpnZXRGYXN0Q2FzZSk6CisgICAgICAgIChibWFsbG9jOjpTYWZlUGVyUHJvY2Vz
czo6Z2V0U2xvd0Nhc2UpOgorICAgICAgICBEdXBsaWNhdGUgdGhlIGNsYXNzIHdpdGggYSB2ZXJz
aW9uIHRoYXQgY2FuIGVuc3VyZQorICAgICAgICBzaW5nbGUgaW5zdGFuY2VzIGJ5IHJlcXVpcmlu
ZyBleHBvcnRpbmcgc3ltYm9scyB0aGF0CisgICAgICAgIGNhbiBiZSBjcmVhdGVkIHdpdGggbWFj
cm9zLgorCisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5nZXIuY3BwOgorICAgICAgICAqIGJtYWxs
b2MvU2NhdmVuZ2VyLmg6CisgICAgICAgIEV4cG9ydCBzeW1ib2xzIHRvIGVuc3VyZSBhbGwgaW1h
Z2VzIGdldCB0aGUgc2FtZSBpbnN0YW5jZS4KKwogMjAxOC0wMS0zMSAgU2FhbSBCYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNlIHRyeUxhcmdlTWVtYWxpZ25WaXJ0
dWFsIHdpdGggdHJ5TGFyZ2VaZXJvZWRNZW1hbGlnblZpcnR1YWwgYW5kIHVzZSBpdCB0byBhbGxv
Y2F0ZSBsYXJnZSB6ZXJvZWQgbWVtb3J5IGluIFdhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSGVhcC5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCmlu
ZGV4IDE4MDI0NGZlMjhlLi45MTUxODQ1MmM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCkBA
IC02NCw3ICs2NCw3IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpCiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgbV9zY2F2ZW5nZXIgPSBQ
ZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpOworICAgIG1fc2NhdmVuZ2VyID0gU2FmZVBlclBy
b2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCk7CiB9CiAKIGJvb2wgSGVhcDo6dXNpbmdHaWdhY2FnZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeUlubGluZXMu
aCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCmluZGV4IGM5
OGQwMTNkMzAyLi5hNjZjYThmNzBhNCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9Jc29EaXJlY3RvcnlJbmxpbmVzLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29E
aXJlY3RvcnlJbmxpbmVzLmgKQEAgLTUxLDcgKzUxLDcgQEAgRWxpZ2liaWxpdHlSZXN1bHQ8Q29u
ZmlnPiBJc29EaXJlY3Rvcnk8Q29uZmlnLCBwYXNzZWROdW1QYWdlcz46OnRha2VGaXJzdEVsaWdp
YmwKICAgICBpZiAocGFnZUluZGV4ID49IG51bVBhZ2VzKQogICAgICAgICByZXR1cm4gRWxpZ2li
aWxpdHlLaW5kOjpGdWxsOwogICAgIAotICAgIFNjYXZlbmdlciYgc2NhdmVuZ2VyID0gKlBlclBy
b2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCk7CisgICAgU2NhdmVuZ2VyJiBzY2F2ZW5nZXIgPSAqU2Fm
ZVBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCk7CiAgICAgc2NhdmVuZ2VyLmRpZFN0YXJ0R3Jv
d2luZygpOwogICAgIAogICAgIElzb1BhZ2U8Q29uZmlnPiogcGFnZSA9IG1fcGFnZXNbcGFnZUlu
ZGV4XTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIElzb0RpcmVjdG9yeTxDb25maWcsIHBhc3Nl
ZE51bVBhZ2VzPjo6ZGlkQmVjb21lKElzb1BhZ2U8Q29uZmlnPiogcGFnZSwgSXNvUAogICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXA6ICVwIGRpZCBi
ZWNvbWUgZW1wdHkuXG4iLCB0aGlzLCBwYWdlKTsKICAgICAgICAgbV9lbXB0eVtwYWdlSW5kZXhd
ID0gdHJ1ZTsKLSAgICAgICAgUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+c2NoZWR1bGUo
SXNvUGFnZUJhc2U6OnBhZ2VTaXplKTsKKyAgICAgICAgU2FmZVBlclByb2Nlc3M8U2NhdmVuZ2Vy
Pjo6Z2V0KCktPnNjaGVkdWxlKElzb1BhZ2VCYXNlOjpwYWdlU2l6ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgQkNSQVNIKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1BlclByb2Nlc3MuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5oCmlu
ZGV4IDI5OTU1NzA5NjdhLi42MGUyNzliYWE4YiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9QZXJQcm9jZXNzLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9j
ZXNzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQZXJQ
cm9jZXNzX2gKLSNkZWZpbmUgUGVyUHJvY2Vzc19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkJJbmxpbmUuaCIKICNpbmNsdWRlICJTaXplcy5oIgpAQCAtMzksNiArMzgsMTAgQEAgbmFtZXNw
YWNlIGJtYWxsb2MgewogLy8KIC8vIE9iamVjdCB3aWxsIGJlIGluc3RhbnRpYXRlZCBvbmx5IG9u
Y2UsIGV2ZW4gaW4gdGhlIGZhY2Ugb2YgY29uY3VycmVuY3kuCiAvLworLy8gV0FSTklORzogUGVy
UHJvY2VzczxUPiBkb2VzIG5vdCBleHBvcnQgaXRzIHN0b3JhZ2UuIFNvIGluIGFjdHVhbGl0eSB3
aGVuCisvLyB1c2VkIGluIG11bHRpcGxlIGxpYnJhcmllcyAvIGltYWdlcyBpdCBlbmRzIHVwIGJl
aW5nIHBlci1pbWFnZS4gVG8gdHJ1bHkKKy8vIGRlY2xhcmUgYSBwZXItcHJvY2VzcyBzaW5nbGV0
b24gdXNlIFNhZmVQZXJQcm9jZXNzPFQ+LgorLy8KIC8vIE5PVEU6IElmIHlvdSBvYnNlcnZlIGds
b2JhbCBzaWRlLWVmZmVjdHMgb2YgdGhlIE9iamVjdCBjb25zdHJ1Y3RvciwgYmUKIC8vIHN1cmUg
dG8gbG9jayB0aGUgT2JqZWN0IG11dGV4LiBGb3IgZXhhbXBsZToKIC8vCkBAIC01NSwxMyArNTgs
MzEgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIFBl
clByb2Nlc3MgewogcHVibGljOgotICAgIHN0YXRpYyBUKiBnZXQoKTsKLSAgICBzdGF0aWMgVCog
Z2V0RmFzdENhc2UoKTsKKyAgICBzdGF0aWMgVCogZ2V0KCkKKyAgICB7CisgICAgICAgIFQqIG9i
amVjdCA9IGdldEZhc3RDYXNlKCk7CisgICAgICAgIGlmICghb2JqZWN0KQorICAgICAgICAgICAg
cmV0dXJuIGdldFNsb3dDYXNlKCk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorCisg
ICAgc3RhdGljIFQqIGdldEZhc3RDYXNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzX29iamVj
dC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIH0KICAgICAKICAgICBzdGF0
aWMgU3RhdGljTXV0ZXgmIG11dGV4KCkgeyByZXR1cm4gc19tdXRleDsgfQogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBUKiBnZXRTbG93Q2FzZSgpOworICAgIEJOT19JTkxJTkUgc3RhdGljIFQqIGdl
dFNsb3dDYXNlKCkKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4g
bG9jayhzX211dGV4KTsKKyAgICAgICAgaWYgKCFzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX2NvbnN1bWUpKSB7CisgICAgICAgICAgICBUKiB0ID0gbmV3ICgmc19tZW1vcnkpIFQobG9j
ayk7CisgICAgICAgICAgICBzX29iamVjdC5zdG9yZSh0LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxl
YXNlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc19vYmplY3QubG9hZChzdGQ6Om1lbW9y
eV9vcmRlcl9jb25zdW1lKTsKKyAgICB9CiAKICAgICBzdGF0aWMgc3RkOjphdG9taWM8VCo+IHNf
b2JqZWN0OwogICAgIHN0YXRpYyBTdGF0aWNNdXRleCBzX211dGV4OwpAQCAtNzAsMzIgKzkxLDYg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgTWVtb3J5IHNfbWVtb3J5OwogfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUJJTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0RmFzdENhc2UoKQotewot
ICAgIHJldHVybiBzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQklOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXQoKQot
ewotICAgIFQqIG9iamVjdCA9IGdldEZhc3RDYXNlKCk7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAg
ICAgIHJldHVybiBnZXRTbG93Q2FzZSgpOwotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1CTk9fSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldFNsb3dDYXNl
KCkKLXsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soc19tdXRleCk7Ci0g
ICAgaWYgKCFzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpKSB7Ci0gICAg
ICAgIFQqIHQgPSBuZXcgKCZzX21lbW9yeSkgVChsb2NrKTsKLSAgICAgICAgc19vYmplY3Quc3Rv
cmUodCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgfQotICAgIHJldHVybiBzX29i
amVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOwotfQotCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogc3RkOjphdG9taWM8VCo+IFBlclByb2Nlc3M8VD46OnNfb2JqZWN0OwogCkBAIC0x
MDUsNiArMTAwLDU5IEBAIFN0YXRpY011dGV4IFBlclByb2Nlc3M8VD46OnNfbXV0ZXg7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogdHlwZW5hbWUgUGVyUHJvY2VzczxUPjo6TWVtb3J5IFBlclByb2Nl
c3M8VD46OnNfbWVtb3J5OwogCisKKy8vIFNhZmVQZXJQcm9jZXNzPFQ+IGJlaGF2ZXMgbGlrZSBQ
ZXJQcm9jZXNzPFQ+LCBidXQgaXRzIHVzYWdlCisvLyByZXF1aXJlcyBERUNMQVJFL0RFRklORSBt
YWNyb3MgdGhhdCBleHBvcnQgc3ltYm9scyB0aGF0IGFsbG93IGZvcgorLy8gYSBzaW5nbGUgc2hh
cmVkIGluc3RhbmNlIGlzIGFjcm9zcyBpbWFnZXMgaW4gdGhlIHByb2Nlc3MuCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBTYWZlUGVyUHJvY2Vzc1N0b3JhZ2VUcmFpdHM7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCRVhQT1JUIFNhZmVQZXJQcm9jZXNzIHsKK3B1YmxpYzoK
KyAgICB1c2luZyBTdG9yYWdlID0gdHlwZW5hbWUgU2FmZVBlclByb2Nlc3NTdG9yYWdlVHJhaXRz
PFQ+OjpTdG9yYWdlOworCisgICAgc3RhdGljIFQqIGdldCgpCisgICAgeworICAgICAgICBUKiBv
YmplY3QgPSBnZXRGYXN0Q2FzZSgpOworICAgICAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgICAg
IHJldHVybiBnZXRTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKwor
ICAgIHN0YXRpYyBUKiBnZXRGYXN0Q2FzZSgpCisgICAgeworICAgICAgICByZXR1cm4gKFN0b3Jh
Z2U6OnNfb2JqZWN0KS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIH0KKwor
ICAgIHN0YXRpYyBTdGF0aWNNdXRleCYgbXV0ZXgoKSB7IHJldHVybiBTdG9yYWdlOjpzX211dGV4
OyB9CisKKyAgICB1c2luZyBNZW1vcnkgPSB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxz
aXplb2YoVCksIHN0ZDo6YWxpZ25tZW50X29mPFQ+Ojp2YWx1ZT46OnR5cGU7CisKK3ByaXZhdGU6
CisgICAgQk5PX0lOTElORSBzdGF0aWMgVCogZ2V0U2xvd0Nhc2UoKQorICAgIHsKKyAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFN0b3JhZ2U6OnNfbXV0ZXgpOworICAg
ICAgICBpZiAoIVN0b3JhZ2U6OnNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3Vt
ZSkpIHsKKyAgICAgICAgICAgIFQqIHQgPSBuZXcgKCZTdG9yYWdlOjpzX21lbW9yeSkgVChsb2Nr
KTsKKyAgICAgICAgICAgIFN0b3JhZ2U6OnNfb2JqZWN0LnN0b3JlKHQsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGVhc2UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdG9yYWdlOjpzX29iamVj
dC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOworICAgIH0KK307CisKKyNkZWZpbmUg
REVDTEFSRV9TQUZFX1BFUl9QUk9DRVNTX1NUT1JBR0UoVHlwZSkgXAorICAgIHRlbXBsYXRlPD4g
c3RydWN0IFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUeXBlPiB7IFwKKyAgICAgICAgc3Ry
dWN0IEJFWFBPUlQgU3RvcmFnZSB7IFwKKyAgICAgICAgICAgIEJFWFBPUlQgc3RhdGljIHN0ZDo6
YXRvbWljPFR5cGUqPiBzX29iamVjdDsgXAorICAgICAgICAgICAgQkVYUE9SVCBzdGF0aWMgU3Rh
dGljTXV0ZXggc19tdXRleDsgXAorICAgICAgICAgICAgQkVYUE9SVCBzdGF0aWMgU2FmZVBlclBy
b2Nlc3M8VHlwZT46Ok1lbW9yeSBzX21lbW9yeTsgXAorICAgICAgICB9OyBcCisgICAgfTsKKwor
I2RlZmluZSBERUZJTkVfU0FGRV9QRVJfUFJPQ0VTU19TVE9SQUdFKFR5cGUpIFwKKyAgICBzdGQ6
OmF0b21pYzxUeXBlKj4gU2FmZVBlclByb2Nlc3NTdG9yYWdlVHJhaXRzPFR5cGU+OjpTdG9yYWdl
OjpzX29iamVjdDsgXAorICAgIFN0YXRpY011dGV4IFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0
czxUeXBlPjo6U3RvcmFnZTo6c19tdXRleDsgXAorICAgIFNhZmVQZXJQcm9jZXNzPFR5cGU+OjpN
ZW1vcnkgU2FmZVBlclByb2Nlc3NTdG9yYWdlVHJhaXRzPFR5cGU+OjpTdG9yYWdlOjpzX21lbW9y
eTsKKwogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gUGVyUHJvY2Vzc19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAgYi9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAKaW5kZXggMDMwY2ZjYjJmNTMuLjBiZGM3N2Qy
ODA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAKKysr
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCkBAIC0zMiw2ICszMiw4IEBA
CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAorREVGSU5FX1NBRkVfUEVSX1BST0NFU1NfU1RPUkFH
RShTY2F2ZW5nZXIpOworCiBTY2F2ZW5nZXI6OlNjYXZlbmdlcihzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JikKIHsKICNpZiBCT1MoREFSV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9TY2F2ZW5nZXIuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2Vy
LmgKaW5kZXggNzFhYTcwOWYzOGYuLjE1YjM3ZGYxM2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1NjYXZlbmdlci5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2Nh
dmVuZ2VyLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCUGxhdGZvcm0uaCIKICNpbmNs
dWRlICJEZWZlcnJlZERlY29tbWl0LmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKKyNpbmNsdWRlICJQ
ZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSA8Y29uZGl0aW9uX3Zh
cmlhYmxlPgogI2luY2x1ZGUgPG11dGV4PgpAQCAtOTIsNiArOTMsOCBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiBtX2RlZmVycmVkRGVjb21taXRzOwogfTsKIAorREVD
TEFSRV9TQUZFX1BFUl9QUk9DRVNTX1NUT1JBR0UoU2NhdmVuZ2VyKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgYm1hbGxvYwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxv
Yy5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwCmluZGV4IDRlNGI4MjQ4
MDI0Li42MTM5YmM4NGE1MSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFs
bG9jLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwCkBAIC03Myw3
ICs3Myw3IEBAIHZvaWQgc2NhdmVuZ2UoKQogewogICAgIHNjYXZlbmdlVGhpc1RocmVhZCgpOwog
Ci0gICAgUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+c2NhdmVuZ2UoKTsKKyAgICBTYWZl
UGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+c2NhdmVuZ2UoKTsKIH0KIAogYm9vbCBpc0Vu
YWJsZWQoSGVhcEtpbmQga2luZCkKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBpc0VuYWJsZWQoSGVh
cEtpbmQga2luZCkKIHZvaWQgc2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MocW9zX2NsYXNzX3Qg
b3ZlcnJpZGVDbGFzcykKIHsKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2Nr
KEhlYXA6Om11dGV4KCkpOwotICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNldFNj
YXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJyaWRlQ2xhc3MpOworICAgIFNhZmVQZXJQcm9jZXNz
PFNjYXZlbmdlcj46OmdldCgpLT5zZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhvdmVycmlkZUNs
YXNzKTsKIH0KICNlbmRpZgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>