<?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>80098</bug_id>
          
          <creation_ts>2012-03-01 22:10:24 -0800</creation_ts>
          <short_desc>DFGCodeBlocks should not trace CodeBlocks that are also going to be traced by virtue of being in the transitive closure</short_desc>
          <delta_ts>2012-03-05 12:12:52 -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>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>InRadar</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>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>569248</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-01 22:10:24 -0800</bug_when>
    <thetext>CodeBlocks get traced during garbage collection when their owner Executable* is found to be live and then traced.  But CodeBlocks may also be traced because they are owned by DFGCodeBlocks.  The latter is necessary because a DFG CodeBlock may be jettisoned - removed from its owner Executable* - because of recompilation.  In fact, there may be multiple DFG CodeBlocks that had once belonged to the same Executable* that are no longer owned by it, but are owned by DFGCodeBlocks.  This might happen if first the Executable&apos;s DFG CodeBlock is thrown out due to recompilation (because its speculations were found to be ineffective), but the CodeBlock was kept alive because there were still functions executing on the JS stack that were using that CodeBlock. Then another DFG CodeBlock may be compiled, and again thrown out, but still kept because of stack references.

This mechanism is implemented by always associating all DFG CodeBlocks with the DFGCodeBlocks data structure, which is part of the Heap. This way the Heap always knows what the set of DFG CodeBlocks (i.e. CodeBlocks that may be jettisoned and may need to have references to them from the stack tracked). Since it tracks both jettisoned and non-jettisoned CodeBlocks, some care must be taken to treat these differently in some cases.

If a CodeBlock is jettisoned but still has references to it from the stack, DFGCodeBlocks must trace it - and in fact it does so correctly. Unfortunately, it fails to check whether the CodeBlock was jettisoned. Because it has references to non-jettisoned CodeBlocks as well, it may end up tracing a CodeBlock that is also going to be traced by virtue of being owned by an Executable that was found to be live.

Our tracing methods (visitChildren, visitAggregate, and the like) are designed to be idempotent: if you call them more than once during GC, then the effect (modulo wasted CPU cycles) is the same as if you had executed them once. So in most cases, this bug would be harmless.

Except that the CodeBlock::visitAggregate method is actually only idempotent if called serially. If the same CodeBlock instance&apos;s visitAggregate method is called concurrently from multiple GC threads - something that can happen in a parallel GC - then the method may cause bizarre state corruption.

The state corruption arises from the one place where CodeBlock::visitAggregate may cause state changes other than marking: namely, its calls to ValueProfile::computeUpdatedPrediction().  This method will read a JSValue, do some things to it, and then store an empty JSValue back.  On 64-bit, this turns out to be racy and imprecise if computeUpdatedPrediction() is called concurrently.  But on 32-bit, you can get a crash due to JSValue tearing: as one thread bangs on the JSValue, the other thread may see the tag of the old value and payload of the new one, or vice-versa. For example the method might be lead to believe it has a heap pointer (based on the tag) when the payload actually contains some integer.

Hence this is a benign bug on 64-bit but a potential show-stopper on 32-bit.

And the fix is super simple: just have DFGCodeBlocks only call CodeBlock::visitAggregate() for those CodeBlocks that are known to be jettisoned and live, rather than calling that method for all live CodeBlocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569257</commentid>
    <comment_count>1</comment_count>
      <attachid>129815</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-01 22:16:39 -0800</bug_when>
    <thetext>Created attachment 129815
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569272</commentid>
    <comment_count>2</comment_count>
      <attachid>129815</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-01 22:26:38 -0800</bug_when>
    <thetext>Comment on attachment 129815
the patch

I just realized that this fix is inadequate. The reason why we were scanning the CodeBlocks even if they were not jettisoned is that they might become jettisoned later in the GC!

The correct fix is to have a separate mechanism for ensuring that a CodeBlock is only scanned once.  I will work on this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569294</commentid>
    <comment_count>3</comment_count>
      <attachid>129825</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-01 22:44:10 -0800</bug_when>
    <thetext>Created attachment 129825
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569350</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-02 00:04:37 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/109519</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569920</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-02 14:04:05 -0800</bug_when>
    <thetext>&lt;rdar://problem/10974632&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570928</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-05 12:09:46 -0800</bug_when>
    <thetext>I wonder if a better long-term approach would be something along the lines of our unconditional finalizers: anything that needs serial post-GC fixup would register an unconditional serial finalizer to do the fixup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570930</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-05 12:12:52 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I wonder if a better long-term approach would be something along the lines of our unconditional finalizers: anything that needs serial post-GC fixup would register an unconditional serial finalizer to do the fixup.

I&apos;m not sure how that would work.  The problem is that the outcome of the GC&apos;s trace is affected by what objects are marked, and CodeBlock::visitAggregate will mark objects.  So if DFGCodeBlocks knows that a CodeBlock needs to do marking, then it should tell that CodeBlock to do marking.

But that same CodeBlock may at any time during marking be found to be live because its ownerExecutable is live, in which case it will also end up doing marking.

Because all of this is part of a fixpoint, I can&apos;t see an easy way to impose any sort of phasing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129815</attachid>
            <date>2012-03-01 22:16:39 -0800</date>
            <delta_ts>2012-03-01 22:44:10 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>fixdfgcodeblocks_patch_1.diff</filename>
            <type>text/plain</type>
            <size>2231</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5NTA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDEyLTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHQ29kZUJsb2NrcyBzaG91bGQgbm90IHRyYWNlIENvZGVCbG9ja3MgdGhhdCBhcmUgYWxzbyBn
b2luZyB0byBiZSB0cmFjZWQgYnkKKyAgICAgICAgdmlydHVlIG9mIGJlaW5nIGluIHRoZSB0cmFu
c2l0aXZlIGNsb3N1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwMDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBJZiBERkdDb2RlQmxvY2tzIHRyYWNlcyBhIENvZGVCbG9jayB0aGF0IG1p
Z2h0IGFsc28gYmUgdHJhY2VkIHZpYSBpdHMgb3duZXIgRXhlY3V0YWJsZSwKKyAgICAgICAgdGhl
biB5b3UgbWlnaHQgaGF2ZSB0aGUgdmlzaXRBZ2dyZWdhdGUoKSBtZXRob2QgY2FsbGVkIGNvbmN1
cnJlbnRseSBieSBtdWx0aXBsZSB0aHJlYWRzLgorICAgICAgICBUaGlzIGlzIGJlbmlnbiBvbiA2
NC1iaXQgLS0gdmlzaXRBZ2dyZWdhdGUoKSBhbmQgZXZlcnl0aGluZyBpdCBjYWxscyB0dXJucyBv
dXQgdG8gYmUKKyAgICAgICAgcmFjeSBhbmQgc2xpZ2h0bHkgaW1wcmVjaXNlIGJ1dCBub3QgdW5z
b3VuZC4gQnV0IG9uIDMyLWJpdCwgdmlzaXRBZ2dyZWdhdGUoKSBtYXkgY3Jhc2gKKyAgICAgICAg
ZHVlIHRvIHdvcmQgdGVhcmluZyBpbiBWYWx1ZVByb2ZpbGUgYnVja2V0IHVwZGF0ZXMgaW5zaWRl
IG9mIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
cyBhIHNpbXBsZSBmaXggYW5kIHVuZm9ydHVuYXRlbHkgdGhlcmUgd2lsbCBiZSBubyBuZXcgdGVz
dHMuIEl0J3MgcG9zc2libGUgdG8KKyAgICAgICAgcmVwcm9kdWNlIHRoaXMgbWF5YmUgMS8xMCB0
aW1lcyBieSBydW5uaW5nIFY4LXY2J3MgcmF5dHJhY2UgcmVwZWF0ZWRseSwgdXNpbmcgdGhlIFY4
CisgICAgICAgIGhhcm5lc3MgaGFja2VkIHRvIHJlcnVuIGl0IGV2ZW4gd2hlbiBpdCdzIGdvdHRl
biBzdWZmaWNpZW50IGNvdW50cy4gQnV0IHRoYXQgdGFrZXMgYQorICAgICAgICB3aGlsZSAtIHNv
bWV0aW1lcyB1cCB0byBhIG1pbnV0ZSB0byBnZXQgYSBjcmFzaC4gSSBoYXZlIG5vIG90aGVyIHJl
bGlhYmxlIHJlcHJvIGNhc2UuCisKKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwOgor
ICAgICAgICAoSlNDOjpERkdDb2RlQmxvY2tzOjp0cmFjZU1hcmtlZENvZGVCbG9ja3MpOgorCiAy
MDEyLTAzLTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmVydCBteSBjaGFuZ2UuIEJyb2tlIGJ1aWxkcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODYsNyArODYsNyBAQCB2b2lkIERGR0NvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkSmV0dGlzCiB2
b2lkIERGR0NvZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYg
KCgqaXRlciktPm1fZGZnRGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgIGlmICgoKml0ZXIp
LT5tX2RmZ0RhdGEtPmlzSmV0dGlzb25lZCAmJiAoKml0ZXIpLT5tX2RmZ0RhdGEtPm1heUJlRXhl
Y3V0aW5nKQogICAgICAgICAgICAgKCppdGVyKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAg
ICAgfQogfQo=
</data>
<flag name="review"
          id="132600"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129825</attachid>
            <date>2012-03-01 22:44:10 -0800</date>
            <delta_ts>2012-03-01 23:15:14 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>fixdfgcodeblocks_patch_2.diff</filename>
            <type>text/plain</type>
            <size>5738</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5NTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDEyLTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHQ29kZUJsb2NrcyBzaG91bGQgbm90IHRyYWNlIENvZGVCbG9ja3MgdGhhdCBhcmUgYWxzbyBn
b2luZyB0byBiZSB0cmFjZWQgYnkKKyAgICAgICAgdmlydHVlIG9mIGJlaW5nIGluIHRoZSB0cmFu
c2l0aXZlIGNsb3N1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwMDk4CisgCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgSWYgREZHQ29kZUJsb2NrcyB0cmFjZXMgYSBDb2RlQmxvY2sgdGhhdCBt
aWdodCBhbHNvIGJlIHRyYWNlZCB2aWEgaXRzIG93bmVyIEV4ZWN1dGFibGUsCisgICAgICAgIHRo
ZW4geW91IG1pZ2h0IGhhdmUgdGhlIHZpc2l0QWdncmVnYXRlKCkgbWV0aG9kIGNhbGxlZCBjb25j
dXJyZW50bHkgYnkgbXVsdGlwbGUgdGhyZWFkcy4KKyAgICAgICAgVGhpcyBpcyBiZW5pZ24gb24g
NjQtYml0IC0tIHZpc2l0QWdncmVnYXRlKCkgYW5kIGV2ZXJ5dGhpbmcgaXQgY2FsbHMgdHVybnMg
b3V0IHRvIGJlCisgICAgICAgIHJhY3kgYW5kIHNsaWdodGx5IGltcHJlY2lzZSBidXQgbm90IHVu
c291bmQuIEJ1dCBvbiAzMi1iaXQsIHZpc2l0QWdncmVnYXRlKCkgbWF5IGNyYXNoCisgICAgICAg
IGR1ZSB0byB3b3JkIHRlYXJpbmcgaW4gVmFsdWVQcm9maWxlIGJ1Y2tldCB1cGRhdGVzIGluc2lk
ZSBvZiBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKS4KKyAgICAgICAgCisgICAgICAgIEl0IHdv
dWxkIHNlZW0gdGhhdCB0aGUgZml4IGlzIGp1c3QgdG8gaGF2ZSBERkdDb2RlQmxvY2tzIG5vdCB0
cmFjZSBDb2RlQmxvY2tzIHRoYXQgYXJlCisgICAgICAgIG5vdCBqZXR0aXNvbmVkLiBCdXQgQ29k
ZUJsb2NrcyBtYXkgYmUgamV0dGlzb25lZCBsYXRlciBkdXJpbmcgdGhlIEdDLCBzbyBpdCBtdXN0
IHRyYWNlCisgICAgICAgIGFueSBDb2RlQmxvY2sgdGhhdCBpdCBrbm93cyB0byBiZSBsaXZlIGJ5
IHZpcnR1ZSBvZiBpdCBiZWluZyByZWFjaGFibGUgZnJvbSB0aGUgc3RhY2suCisgICAgICAgIEhl
bmNlIHRoZSByZWFsIGZpeCBpcyB0byBtYWtlIHN1cmUgdGhhdCBjb25jdXJyZW50IGNhbGxzIGlu
dG8gQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSgpCisgICAgICAgIGRvbid0IGxlYWQgdG8gdHdv
IHRocmVhZHMgcmFjaW5nIG92ZXIgZWFjaCBvdGhlciBhcyB0aGV5IGNsb2JiZXIgc3RhdGUuIFRo
aXMgcGF0Y2gKKyAgICAgICAgYWNoaWV2ZXMgdGhpcyB3aXRoIGEgc2ltcGxlIENBUyBsb29wOiB3
aGljaGV2ZXIgdGhyZWFkIHdpbnMgdGhlIENBUyByYWNlICh3aGljaCBpcworICAgICAgICB0cml2
aWFsbHkgbGluZWFyaXphYmxlKSB3aWxsIGdldCB0byB0cmFjZSB0aGUgQ29kZUJsb2NrOyBhbGwg
b3RoZXIgdGhyZWFkcyBnaXZlIHVwIGFuZAorICAgICAgICBnbyBob21lLgorICAgICAgICAKKyAg
ICAgICAgVW5mb3J0dW5hdGVseSB0aGVyZSB3aWxsIGJlIG5vIG5ldyB0ZXN0cy4gSXQncyBwb3Nz
aWJsZSB0byByZXByb2R1Y2UgdGhpcyBtYXliZSAxLzEwCisgICAgICAgIHRpbWVzIGJ5IHJ1bm5p
bmcgVjgtdjYncyByYXl0cmFjZSByZXBlYXRlZGx5LCB1c2luZyB0aGUgVjggaGFybmVzcyBoYWNr
ZWQgdG8gcmVydW4gaXQKKyAgICAgICAgZXZlbiB3aGVuIGl0J3MgZ290dGVuIHN1ZmZpY2llbnQg
Y291bnRzLiBCdXQgdGhhdCB0YWtlcyBhIHdoaWxlIC0gc29tZXRpbWVzIHVwIHRvIGEKKyAgICAg
ICAgbWludXRlIHRvIGdldCBhIGNyYXNoLiBJIGhhdmUgbm8gb3RoZXIgcmVsaWFibGUgcmVwcm8g
Y2FzZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoREZHRGF0YSk6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcyk6CisKIDIwMTItMDMt
MDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBUaGUgSklUIHNo
b3VsZCBub3QgY3Jhc2ggdGhlIGVudGlyZSBwcm9jZXNzIGp1c3QgYmVjYXVzZSB0aGVyZSBpcyBu
b3QgZW5vdWdoIGV4ZWN1dGFibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxOSw2ICsx
NjE5LDMyIEBAIHZvaWQgRXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFYKIAogdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworI2lm
IEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBpZiAoISFtX2RmZ0RhdGEpIHsKKyAgICAgICAgLy8g
SSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYgbW9yZSB0aGFuIG9uY2UsIGFuZCBpdCBtYXkg
ZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgorICAgICAgICAvLyBUbyB0aGlzIGVuZCwgdXNlIGEg
Q0FTIGxvb3AgdG8gY2hlY2sgaWYgSSd2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5LiBPbmx5IG9uZSB0
aHJlYWQKKyAgICAgICAgLy8gbWF5IHByb2NlZWQgcGFzdCB0aGlzIHBvaW50IC0gd2hpY2hldmVy
IG9uZSB3aW5zIHRoZSBDQVMgcmFjZS4KKyAgICAgICAgdW5zaWduZWQgb2xkVmFsdWU7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIG9sZFZhbHVlID0gbV9kZmdEYXRhLT52aXNpdEFnZ3JlZ2F0
ZUhhc0JlZW5DYWxsZWQ7CisgICAgICAgICAgICBpZiAob2xkVmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAvLyBMb29rcyBsaWtlIHNvbWVvbmUgZWxzZSB3b24hIFJldHVybiBpbW1lZGlhdGVseSB0
byBlbnN1cmUgdGhhdCB3ZSBkb24ndAorICAgICAgICAgICAgICAgIC8vIHRyYWNlIHRoZSBzYW1l
IENvZGVCbG9jayBjb25jdXJyZW50bHkuIERvaW5nIHNvIGlzIGhhemFyZG91cyBzaW5jZSB3ZSB3
aWxsCisgICAgICAgICAgICAgICAgLy8gYmUgbXV0YXRpbmcgdGhlIHN0YXRlIG9mIFZhbHVlUHJv
ZmlsZXMsIHdoaWNoIGNvbnRhaW4gSlNWYWx1ZXMsIHdoaWNoIGNhbgorICAgICAgICAgICAgICAg
IC8vIGhhdmUgd29yZC10ZWFyaW5nIG9uIDMyLWJpdCwgbGVhZGluZyB0byBhd2Vzb21lIHRpbWlu
Zy1kZXBlbmRlbnQgY3Jhc2hlcworICAgICAgICAgICAgICAgIC8vIHRoYXQgYXJlIG5lYXJseSBp
bXBvc3NpYmxlIHRvIHRyYWNrIGRvd24uCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gQWxzbyBub3RlIHRoYXQgaXQgbXVzdCBiZSBzYWZlIHRvIHJldHVybiBlYXJseSBhcyBz
b29uIGFzIHdlIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAvLyB2YWx1ZSB0cnVlICh3ZWxsLCAo
dW5zaWduZWQpMSksIHNpbmNlIG9uY2UgYSBHQyB0aHJlYWQgaXMgaW4gdGhpcyBtZXRob2QKKyAg
ICAgICAgICAgICAgICAvLyBhbmQgaGFzIHdvbiB0aGUgQ0FTIHJhY2UgKGkuZS4gd2FzIHJlc3Bv
bnNpYmxlIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSB0cnVlKQorICAgICAgICAgICAgICAgIC8vIGl0
IHdpbGwgZGVmaW5pdGVseSBjb21wbGV0ZSB0aGUgcmVzdCBvZiB0aGlzIG1ldGhvZCBiZWZvcmUg
ZGVjbGFyaW5nCisgICAgICAgICAgICAgICAgLy8gdGVybWluYXRpb24uCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlICghV1RGOjp3ZWFrQ29t
cGFyZUFuZFN3YXAoJm1fZGZnRGF0YS0+dmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLCAwLCAx
KSk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAKICAgICBpZiAo
ISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcyLDYgKzExNzIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIGJvb2wgaXNKZXR0aXNvbmVkOwogICAgICAgICAgICAgYm9v
bCBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5
IEdDLgogICAgICAgICAgICAgYm9vbCBhbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJ
bml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KKyAgICAgICAgICAgIHVuc2lnbmVkIHZp
c2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsgLy8gVW5zaWduZWQgdG8gbWFrZSBpdCB3b3JrIHNl
YW1sZXNzbHkgd2l0aCB0aGUgYnJvYWRlc3Qgc2V0IG9mIENBUyBpbXBsZW1lbnRhdGlvbnMuCiAg
ICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAJKHJl
dmlzaW9uIDEwOTMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9j
a3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMCBAQCB2b2lkIERGR0NvZGVCbG9j
a3M6OmpldHRpc29uKFBhc3NPd25QdHI8CiAKIHZvaWQgREZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJr
cygpCiB7Ci0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9z
ZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKQorICAgIGZvciAoSGFzaFNl
dDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9z
ZXQuZW5kKCk7ICsraXRlcikgewogICAgICAgICAoKml0ZXIpLT5tX2RmZ0RhdGEtPm1heUJlRXhl
Y3V0aW5nID0gZmFsc2U7CisgICAgICAgICgqaXRlciktPm1fZGZnRGF0YS0+dmlzaXRBZ2dyZWdh
dGVIYXNCZWVuQ2FsbGVkID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIERGR0NvZGVCbG9ja3M6
OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKQo=
</data>
<flag name="review"
          id="132613"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>