<?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>67072</bug_id>
          
          <creation_ts>2011-08-26 17:29:27 -0700</creation_ts>
          <short_desc>JSC::Executable is inconsistent about using weak handle finalizers and destructors for releasing memory</short_desc>
          <delta_ts>2011-08-27 14:50:06 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>457868</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-26 17:29:27 -0700</bug_when>
    <thetext>For executable code, JSC::Executable uses a weak handle finalizer.  This ensures the executable code is released as soon as the GC knows that the Executable object is no longer reachable.  For everything else, JSC::Executable uses a destructor, which may only run when the cell in which JSC::Executable was allocated gets used for a new allocation.

This is not a bad approach from a performance standpoint, since releasing executable code as soon as possible is always a good policy.  But, the CodeBlock object is itself sizable, so releasing it sooner would be nice for memory usage.  It&apos;s also true that moving all memory release into a finalizer is a good step towards ultimately not executing destructors.  Doing so also makes confusing code slightly less confusing.  The code is necessarily confusing because certain state in CodeBlock is stored in Executable to make it quicker to query during function dispatch.  The current approach means that the part of CodeBlock&apos;s state that is stored in Executable is freed early, so when the CodeBlock is freed later from the destructor, some of its state is already released.  It&apos;s probably wise to continue to store (or at least cache) some of CodeBlock&apos;s state in Executable, but it would make things somewhat easier to understand if the release of CodeBlock memory happened at the same time as the release of CodeBlock state that was cached in Executable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457872</commentid>
    <comment_count>1</comment_count>
      <attachid>105424</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-26 17:40:58 -0700</bug_when>
    <thetext>Created attachment 105424
the patch

Tests seem to pass, it seems that with this patch I can still browse the web, and performance appears neutral.  Full performance report below.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;ExecFinalize&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Used 1 benchmark iteration per VM
invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting
benchmark execution times with 95% confidence intervals in milliseconds.

                                            TipOfTree              ExecFinalize                                  
SunSpider:
   3d-cube                                7.6708+-0.1176          7.5841+-0.1639         might be 1.0114x faster
   3d-morph                               7.5792+-0.1602          7.3793+-0.1658         might be 1.0271x faster
   3d-raytrace                            7.6858+-0.1833          7.6331+-0.1749       
   access-binary-trees                    2.3464+-0.1027          2.2665+-0.0545         might be 1.0353x faster
   access-fannkuch                       11.6685+-0.2678    ?    11.7823+-0.2536       ?
   access-nbody                           4.2522+-0.0905          4.1475+-0.0589         might be 1.0252x faster
   access-nsieve                          2.5671+-0.0849          2.4992+-0.0802         might be 1.0272x faster
   bitops-3bit-bits-in-byte               1.7282+-0.0525    ?     1.7325+-0.0437       ?
   bitops-bits-in-byte                    4.4494+-0.2025          4.4308+-0.1947       
   bitops-bitwise-and                     3.6244+-0.0621    ?     3.6801+-0.0639       ? might be 1.0154x slower
   bitops-nsieve-bits                     5.4832+-0.1309          5.3283+-0.1084         might be 1.0291x faster
   controlflow-recursive                  2.0154+-0.0503    ?     2.1204+-0.0739       ? might be 1.0521x slower
   crypto-aes                             6.4391+-0.2795    ?     6.6213+-0.1974       ? might be 1.0283x slower
   crypto-md5                             2.8146+-0.0728          2.7349+-0.0893         might be 1.0291x faster
   crypto-sha1                            2.2402+-0.0931          2.2180+-0.0429         might be 1.0100x faster
   date-format-tofte                     10.1556+-0.1648         10.0386+-0.1697         might be 1.0117x faster
   date-format-xparb                      8.6652+-0.2455          8.3647+-0.2152         might be 1.0359x faster
   math-cordic                            6.2553+-0.1021    ?     6.4305+-0.1790       ? might be 1.0280x slower
   math-partial-sums                      7.6624+-0.1552          7.5720+-0.1294         might be 1.0119x faster
   math-spectral-norm                     2.4831+-0.0550          2.4610+-0.0428       
   regexp-dna                            10.2313+-0.1627    ?    10.3778+-0.2369       ? might be 1.0143x slower
   string-base64                          6.0103+-0.1399    ?     6.0212+-0.1152       ?
   string-fasta                           7.3684+-0.1139          7.3548+-0.1170       
   string-tagcloud                       13.3408+-0.2701    ?    13.3510+-0.2191       ?
   string-unpack-code                    18.5239+-0.3307         18.4312+-0.2688       
   string-validate-input                  7.3392+-0.3738          7.2632+-0.1464         might be 1.0105x faster

   &lt;arithmetic&gt;                           6.5615+-0.0347          6.5317+-0.0292       
   &lt;geometric&gt;                            5.4509+-0.0349          5.4234+-0.0285       
   &lt;harmonic&gt;                             4.4624+-0.0390          4.4418+-0.0268       

                                            TipOfTree              ExecFinalize                                  
V8:
   crypto                                89.9669+-0.9327         89.8237+-0.5736       
   deltablue                            265.7069+-2.3741        263.3825+-1.1593       
   earley-boyer                         101.6921+-0.7357        101.3654+-0.7025       
   raytrace                              79.4849+-2.3809         77.1534+-0.4093         might be 1.0302x faster
   regexp                               109.1505+-0.7869    ?   110.0358+-1.0691       ?
   richards                             240.8500+-1.5259    ?   242.0161+-1.1816       ?
   splay                                108.6089+-0.7801    ?   108.7020+-1.0020       ?

   &lt;arithmetic&gt;                         142.2086+-0.6081        141.7827+-0.3095       
   &lt;geometric&gt;                          127.6110+-0.7872        127.0863+-0.3010       
   &lt;harmonic&gt;                           116.9864+-0.9733        116.3146+-0.3005       

                                            TipOfTree              ExecFinalize                                  
Kraken:
   ai-astar                            1089.1605+-11.5608   ?  1093.1558+-10.3830      ?
   audio-beat-detection                 469.1552+-2.4998    ?   472.8775+-4.3576       ?
   audio-dft                            423.7785+-12.0481   ?   427.6782+-12.8277      ?
   audio-fft                            366.1977+-0.7915    !   369.2613+-0.7147       ! definitely 1.0084x slower
   audio-oscillator                     399.8224+-4.1327        397.2567+-2.8732       
   imaging-darkroom                     526.6979+-3.3260    ?   530.2128+-3.4240       ?
   imaging-desaturate                   586.1033+-6.2498    ?   588.2981+-7.4616       ?
   imaging-gaussian-blur               1704.6206+-4.4376    ?  1705.4177+-5.6552       ?
   json-parse-financial                  48.0213+-0.2319    !    48.6721+-0.3170       ! definitely 1.0136x slower
   json-stringify-tinderbox              62.1680+-0.8153    ?    62.6272+-0.6596       ?
   stanford-crypto-aes                  143.6970+-1.8040    ?   144.7303+-1.9498       ?
   stanford-crypto-ccm                  111.4988+-1.1214        111.4743+-0.7385       
   stanford-crypto-pbkdf2               335.6885+-2.1689    ?   336.1219+-1.8932       ?
   stanford-crypto-sha256-iterative     129.5380+-0.3716    ?   132.1052+-3.1976       ? might be 1.0198x slower

   &lt;arithmetic&gt;                         456.8677+-1.9499    ?   458.5635+-1.2238       ?
   &lt;geometric&gt;                          293.1670+-1.1406    ?   294.8764+-0.9579       ?
   &lt;harmonic&gt;                           178.6056+-0.5588    !   180.1183+-0.7114       ! definitely 1.0085x slower

                                            TipOfTree              ExecFinalize                                  
All benchmarks:
   &lt;arithmetic&gt;                         160.8980+-0.6071    ?   161.3232+-0.3711       ?
   &lt;geometric&gt;                           28.5710+-0.1106         28.5233+-0.0851       
   &lt;harmonic&gt;                             7.8796+-0.0674          7.8446+-0.0462</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457959</commentid>
    <comment_count>2</comment_count>
      <attachid>105424</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-27 11:54:53 -0700</bug_when>
    <thetext>Comment on attachment 105424
the patch

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

&gt; Source/JavaScriptCore/runtime/Executable.cpp:251
&gt; +    if (m_evalCodeBlock)
&gt; +        m_evalCodeBlock-&gt;clearEvalCache();
&gt; +    m_evalCodeBlock.clear();

Could put the clear inside the if.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:343
&gt; +    if (m_programCodeBlock)
&gt; +        m_programCodeBlock-&gt;clearEvalCache();
&gt; +    m_programCodeBlock.clear();

Could put the clear inside the if.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:496
&gt;      if (m_codeBlockForCall)
&gt;          m_codeBlockForCall-&gt;clearEvalCache();
&gt;      m_codeBlockForCall.clear();

Could put the clear inside the if.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:499
&gt;      if (m_codeBlockForConstruct)
&gt;          m_codeBlockForConstruct-&gt;clearEvalCache();
&gt;      m_codeBlockForConstruct.clear();

Could put the clear inside the if.

&gt; Source/JavaScriptCore/runtime/Executable.h:-69
&gt; -#if ENABLE(JIT)
&gt;              Weak&lt;ExecutableBase&gt; finalizer(globalData, this, executableFinalizer());
&gt;              finalizer.leakHandle();
&gt; -#endif

Would be nice to have a comment in the change log explaining this change.

&gt; Source/JavaScriptCore/runtime/Executable.h:337
&gt; +        virtual void clearCode();

I like to follow a pattern where virtual functions overrides are private or protected, even when the base class function is public. This sometimes lets us discover cases where we would be doing a virtual function dispatch and could instead do a non-virtual, and has little cost.

Accordingly, I suggest making this protected and private in derived classes, and leave it public only in ExecutableBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457989</commentid>
    <comment_count>3</comment_count>
      <attachid>105442</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-27 14:32:23 -0700</bug_when>
    <thetext>Created attachment 105442
the patch (fix review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457990</commentid>
    <comment_count>4</comment_count>
      <attachid>105442</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-27 14:50:02 -0700</bug_when>
    <thetext>Comment on attachment 105442
the patch (fix review)

Clearing flags on attachment: 105442

Committed r93947: &lt;http://trac.webkit.org/changeset/93947&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457991</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-27 14:50:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105424</attachid>
            <date>2011-08-26 17:40:58 -0700</date>
            <delta_ts>2011-08-27 14:32:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>execfinalize_patch_1.diff</filename>
            <type>text/plain</type>
            <size>6362</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTEtMDgtMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0M6OkV4ZWN1dGFibGUgaXMgaW5jb25zaXN0ZW50IGFib3V0IHVzaW5nIHdlYWsgaGFuZGxlIGZp
bmFsaXplcnMKKyAgICAgICAgYW5kIGRlc3RydWN0b3JzIGZvciByZWxlYXNpbmcgbWVtb3J5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTW92
ZWQgbW9yZSBvZiB0aGUgZGVzdHJ1Y3Rpb24gb2YgRXhlY3V0YWJsZSBzdGF0ZSBpbnRvIHRoZSBm
aW5hbGl6ZXIsCisgICAgICAgIHdoaWNoIGFsc28gcmVzdWx0ZWQgaW4gYW4gb3Bwb3J0dW5pdHkg
dG8gbW9zdGx5IGNvbWJpbmUgdGhpcyB3aXRoCisgICAgICAgIGRpc2NhcmRDb2RlKCkuICBUaGlz
IGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwgb24gU3VuU3BpZGVyLCBWOCwgYW5kCisgICAgICAgIEty
YWtlbi4KKworICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlRmlu
YWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjbGVhckNv
ZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpkaXNjYXJkQ29kZSk6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmZpbmlzaENyZWF0aW9uKToK
KwogMjAxMS0wOC0yNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgog
CiAgICAgICAgIFVuemlwIGluaXRpYWxpemF0aW9uIGxpc3RzIGFuZCBjb25zdHJ1Y3RvcnMgaW4g
SlNDZWxsIGhpZXJhcmNoeSAoMi83KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDkzOTIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDExICs4
NywyMyBAQCBzdGF0aWMgYm9vbCB0cnlERkdDb21waWxlKEV4ZWNTdGF0ZSosIENvCiBzdGF0aWMg
Ym9vbCB0cnlERkdDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYpIHsgcmV0dXJuIGZhbHNlOyB9
CiAjZW5kaWYKIAordm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKK3sKKyNpZiBFTkFC
TEUoSklUKQorICAgIG1faml0Q29kZUZvckNhbGwuY2xlYXIoKTsKKyAgICBtX2ppdENvZGVGb3JD
b25zdHJ1Y3QuY2xlYXIoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJp
dHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworI2VuZGlmCisgICAgbV9udW1QYXJh
bWV0ZXJzRm9yQ2FsbCA9IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKKyAgICBtX251bVBh
cmFtZXRlcnNGb3JDb25zdHJ1Y3QgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7Cit9CisK
IGNsYXNzIEV4ZWN1dGFibGVGaW5hbGl6ZXIgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAg
ICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCopCiAg
ICAgewogICAgICAgICBXZWFrPEV4ZWN1dGFibGVCYXNlPiBleGVjdXRhYmxlKFdlYWs8RXhlY3V0
YWJsZUJhc2U+OjpBZG9wdCwgaGFuZGxlKTsKLSAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJFeGVj
dXRhYmxlQ29kZSgpOworICAgICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGUoKTsKICAgICB9CiB9
OwogCkBAIC0yMzIsNiArMjQ0LDE0IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnVubGlua0NhbGxz
KCkKICNlbmRpZgogfQogCit2b2lkIEV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUoKQoreworICAg
IGlmIChtX2V2YWxDb2RlQmxvY2spCisgICAgICAgIG1fZXZhbENvZGVCbG9jay0+Y2xlYXJFdmFs
Q2FjaGUoKTsKKyAgICBtX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKKyAgICBCYXNlOjpjbGVhckNv
ZGUoKTsKK30KKwogSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CkBAIC0zMTYsNiAr
MzM2LDE0IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oU2wKICAgICAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAordm9p
ZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKK3sKKyAgICBpZiAobV9wcm9ncmFtQ29k
ZUJsb2NrKQorICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmNsZWFyRXZhbENhY2hlKCk7Cisg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgQmFzZTo6Y2xlYXJDb2RlKCk7Cit9
CisKIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0
ZSogY2FsbGVlQXJnc0V4ZWMpCiB7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CkBAIC00
NTcsMjAgKzQ4NSwxOSBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGlzY2FyZENvZGUoKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2ppdENvZGVGb3JDb25zdHJ1Y3QgJiYgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2ppdENvZGVGb3JDYWxs
ID0gSklUQ29kZSgpOwotICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVENvZGUoKTsKLSAg
ICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKLSAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpOwogI2VuZGlmCisgICAgY2xlYXJDb2RlKCk7Cit9CisKK3ZvaWQgRnVuY3Rp
b25FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQorewogICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwp
CiAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+Y2xlYXJFdmFsQ2FjaGUoKTsKICAgICBtX2Nv
ZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qp
CiAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jbGVhckV2YWxDYWNoZSgpOwogICAg
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7Ci0gICAgbV9udW1QYXJhbWV0ZXJzRm9y
Q2FsbCA9IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKLSAgICBtX251bVBhcmFtZXRlcnNG
b3JDb25zdHJ1Y3QgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7Ci0KKyAgICBCYXNlOjpj
bGVhckNvZGUoKTsKIH0KIAogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua0NhbGxzKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlz
aW9uIDkzOTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MywxMCArNjMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotI2lmIEVO
QUJMRShKSVQpCiAgICAgICAgICAgICBXZWFrPEV4ZWN1dGFibGVCYXNlPiBmaW5hbGl6ZXIoZ2xv
YmFsRGF0YSwgdGhpcywgZXhlY3V0YWJsZUZpbmFsaXplcigpKTsKICAgICAgICAgICAgIGZpbmFs
aXplci5sZWFrSGFuZGxlKCk7Ci0jZW5kaWYKICAgICAgICAgfQogICAgICAgICAKICAgICBwdWJs
aWM6CkBAIC04OSw2ICs4Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyQ29kZSgpOworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSAwOwogICAgICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzRm9yQ2Fs
bDsKQEAgLTE1NiwyMSArMTU2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIGhhc0pJVENvZGVGb3JDb25zdHJ1Y3QoKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
Y2xlYXJFeGVjdXRhYmxlQ29kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faml0Q29kZUZv
ckNhbGwuY2xlYXIoKTsKLSAgICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdC5jbGVhcigp
OwotICAgICAgICB9Ci0KICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpJVENvZGUgbV9qaXRDb2Rl
Rm9yQ2FsbDsKICAgICAgICAgSklUQ29kZSBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2s7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJp
dHlDaGVjazsKKyNlbmRpZgogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMg
V2Vha0hhbmRsZU93bmVyKiBleGVjdXRhYmxlRmluYWxpemVyKCk7Ci0jZW5kaWYKICAgICB9Owog
CiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkBA
IC0zMzksNiArMzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCisgICAgICAgIHZpcnR1YWwg
dm9pZCBjbGVhckNvZGUoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRF
eGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0
YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wpOwpAQCAtMzkzLDYgKzM5MCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29kZSgpOworCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAg
ICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CkBAIC01
MjMsNiArNTIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgICAgICAKKyAgICAgICAgdmly
dHVhbCB2b2lkIGNsZWFyQ29kZSgpOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQo=
</data>
<flag name="review"
          id="101566"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105442</attachid>
            <date>2011-08-27 14:32:23 -0700</date>
            <delta_ts>2011-08-27 14:50:02 -0700</delta_ts>
            <desc>the patch (fix review)</desc>
            <filename>execfinalize_patch_2.diff</filename>
            <type>text/plain</type>
            <size>8029</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5NDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTEtMDgtMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0M6OkV4ZWN1dGFibGUgaXMgaW5jb25zaXN0ZW50IGFib3V0IHVzaW5nIHdlYWsgaGFuZGxlIGZp
bmFsaXplcnMKKyAgICAgICAgYW5kIGRlc3RydWN0b3JzIGZvciByZWxlYXNpbmcgbWVtb3J5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorICAgICAgICAKKyAgICAgICAgTW92ZWQg
bW9yZSBvZiB0aGUgZGVzdHJ1Y3Rpb24gb2YgRXhlY3V0YWJsZSBzdGF0ZSBpbnRvIHRoZSBmaW5h
bGl6ZXIsCisgICAgICAgIHdoaWNoIGFsc28gcmVzdWx0ZWQgaW4gYW4gb3Bwb3J0dW5pdHkgdG8g
bW9zdGx5IGNvbWJpbmUgdGhpcyB3aXRoCisgICAgICAgIGRpc2NhcmRDb2RlKCkuICBUaGlzIGFs
c28gbWVhbnMgdGhhdCB0aGUgZmluYWxpemVyIGlzIG5vdyBlbmFibGVkIGV2ZW4KKyAgICAgICAg
d2hlbiB0aGUgSklUIGlzIHR1cm5lZCBvZmYuICBUaGlzIGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwg
b24gU3VuU3BpZGVyLAorICAgICAgICBWOCwgYW5kIEtyYWtlbi4KKworICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNv
ZGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlRmluYWxpemVyOjpmaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUpOgorICAgICAgICAoSlNDOjpQcm9n
cmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpkaXNjYXJkQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xl
YXJDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUJhc2U6OmZpbmlzaENyZWF0aW9uKToKKwogMjAxMS0wOC0yNiAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCAtIEFy
aXRoTW9kIG1heSBjbG9iYmVyIG9wZXJhbmRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDkzOTQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDcgQEAgc3RhdGljIGJvb2wgdHJ5REZHQ29tcGlsZShFeGVjU3RhdGUqIGV4ZQogICAg
IC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBvcnRlZCwgZG9uJ3QgYm90aGVyIHNj
YW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55IGp1bXAgdGFyZ2V0cy4KICAgICBp
ZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9OUykKIAogICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgREZH
OjpHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1W
YXJzKTsKQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIGJvb2wgdHJ5REZHQ29tcGlsZUZ1bmN0aW9u
KEV4ZWNTdAogICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBvcnRlZCwgZG9u
J3QgYm90aGVyIHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55IGp1bXAgdGFy
Z2V0cy4KICAgICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNU
SU9OUykKIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CiAgICAgREZHOjpHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVC
bG9jay0+bV9udW1WYXJzKTsKQEAgLTgyLDE2ICs4MiwyOSBAQCBzdGF0aWMgYm9vbCB0cnlERkdD
b21waWxlRnVuY3Rpb24oRXhlY1N0CiAgICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKGpp
dENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0jZWxz
ZQorI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgYm9vbCB0cnlERkdDb21waWxlKEV4
ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGlj
IGJvb2wgdHJ5REZHQ29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSosIENvZGVC
bG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKSB7IHJldHVybiBmYWxzZTsg
fQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisgICAg
Cit2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKQoreworI2lmIEVOQUJMRShKSVQpCisg
ICAgbV9qaXRDb2RlRm9yQ2FsbC5jbGVhcigpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdC5j
bGVhcigpOworICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAjZW5kaWYKKyAgICBtX251bVBhcmFtZXRlcnNGb3JD
YWxsID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOworICAgIG1fbnVtUGFyYW1ldGVyc0Zv
ckNvbnN0cnVjdCA9IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKK30KIAogY2xhc3MgRXhl
Y3V0YWJsZUZpbmFsaXplciA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAgIHZpcnR1YWwg
dm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKikKICAgICB7CiAgICAg
ICAgIFdlYWs8RXhlY3V0YWJsZUJhc2U+IGV4ZWN1dGFibGUoV2VhazxFeGVjdXRhYmxlQmFzZT46
OkFkb3B0LCBoYW5kbGUpOwotICAgICAgICBleGVjdXRhYmxlLT5jbGVhckV4ZWN1dGFibGVDb2Rl
KCk7CisgICAgICAgIGV4ZWN1dGFibGUtPmNsZWFyQ29kZSgpOwogICAgIH0KIH07CiAKQEAgLTEw
MCw4ICsxMTMsNyBAQCBXZWFrSGFuZGxlT3duZXIqIEV4ZWN1dGFibGVCYXNlOjpleGVjdXRhCiAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChFeGVjdXRhYmxlRmluYWxpemVyLCBmaW5hbGl6ZXIsICgp
KTsKICAgICByZXR1cm4gJmZpbmFsaXplcjsKIH0KLSNlbmRpZgotICAgIAorCiBjb25zdCBDbGFz
c0luZm8gTmF0aXZlRXhlY3V0YWJsZTo6c19pbmZvID0geyAiTmF0aXZlRXhlY3V0YWJsZSIsICZF
eGVjdXRhYmxlQmFzZTo6c19pbmZvLCAwLCAwIH07CiAKIE5hdGl2ZUV4ZWN1dGFibGU6On5OYXRp
dmVFeGVjdXRhYmxlKCkKQEAgLTIzMiw2ICsyNDQsMTUgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6
dW5saW5rQ2FsbHMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OmNsZWFyQ29k
ZSgpCit7CisgICAgaWYgKG1fZXZhbENvZGVCbG9jaykgeworICAgICAgICBtX2V2YWxDb2RlQmxv
Y2stPmNsZWFyRXZhbENhY2hlKCk7CisgICAgICAgIG1fZXZhbENvZGVCbG9jay5jbGVhcigpOwor
ICAgIH0KKyAgICBCYXNlOjpjbGVhckNvZGUoKTsKK30KKwogSlNPYmplY3QqIFByb2dyYW1FeGVj
dXRhYmxlOjpjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNPYmplY3QqIGV4
Y2VwdGlvbiA9IDA7CkBAIC0zMTYsNiArMzM3LDE1IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4oU2wKICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKIH0KIAordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkK
K3sKKyAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrKSB7CisgICAgICAgIG1fcHJvZ3JhbUNvZGVC
bG9jay0+Y2xlYXJFdmFsQ2FjaGUoKTsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLmNsZWFy
KCk7CisgICAgfQorICAgIEJhc2U6OmNsZWFyQ29kZSgpOworfQorCiBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQog
ewogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwpAQCAtNDU3LDIwICs0ODcsMjEgQEAgdm9p
ZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRpc2NhcmRDb2RlKCkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghbV9qaXRDb2RlRm9yQ29uc3RydWN0ICYmIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQog
ICAgICAgICByZXR1cm47Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVENvZGUoKTsKLSAgICBt
X2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBKSVRDb2RlKCk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAgbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICNlbmRp
ZgotICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwpCisgICAgY2xlYXJDb2RlKCk7Cit9CisKK3Zv
aWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQoreworICAgIGlmIChtX2NvZGVCbG9j
a0ZvckNhbGwpIHsKICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5jbGVhckV2YWxDYWNoZSgp
OwotICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5jbGVhcigpOwotICAgIGlmIChtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCkKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgfQor
ICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkgewogICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+Y2xlYXJFdmFsQ2FjaGUoKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC5jbGVhcigpOwotICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFSQU1FVEVSU19O
T1RfQ09NUElMRUQ7Ci0gICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFN
RVRFUlNfTk9UX0NPTVBJTEVEOwotCisgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNs
ZWFyKCk7CisgICAgfQorICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCiB2b2lkIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTM5NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEwICs2Myw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7Ci0jaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIFdlYWs8RXhl
Y3V0YWJsZUJhc2U+IGZpbmFsaXplcihnbG9iYWxEYXRhLCB0aGlzLCBleGVjdXRhYmxlRmluYWxp
emVyKCkpOwogICAgICAgICAgICAgZmluYWxpemVyLmxlYWtIYW5kbGUoKTsKLSNlbmRpZgogICAg
ICAgICB9CiAgICAgICAgIAogICAgIHB1YmxpYzoKQEAgLTg5LDYgKzg3LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
IAorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2RlKCk7CisKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IDA7CiAgICAgICAg
IGludCBtX251bVBhcmFtZXRlcnNGb3JDYWxsOwpAQCAtMTU2LDIxICsxNTYsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaGFzSklUQ29kZUZvckNvbnN0cnVjdCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBjbGVhckV4ZWN1dGFibGVDb2RlKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbC5jbGVhcigpOwotICAgICAgICAgICAgbV9q
aXRDb2RlRm9yQ29uc3RydWN0LmNsZWFyKCk7Ci0gICAgICAgIH0KLQogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgSklUQ29kZSBtX2ppdENvZGVGb3JDYWxsOwogICAgICAgICBKSVRDb2RlIG1faml0
Q29kZUZvckNvbnN0cnVjdDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1f
aml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOworI2VuZGlmCiAgICAgICAgIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBXZWFrSGFuZGxlT3duZXIqIGV4ZWN1dGFibGVGaW5h
bGl6ZXIoKTsKLSNlbmRpZgogICAgIH07CiAKICAgICBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlIDog
cHVibGljIEV4ZWN1dGFibGVCYXNlIHsKQEAgLTMzOSw2ICszMzMsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2Rl
KCk7CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3Ry
dWN0dXJlRmxhZ3M7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBib29sKTsKQEAgLTM5Miw2ICszOTAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29k
ZSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0
cnVjdHVyZUZsYWdzOwpAQCAtNTIzLDggKzUyNCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Ci0K
KyAgICAgICAgCiAgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2Rl
KCk7CisKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkK
ICAgICAgICAgewogICAgICAgICAgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>