<?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>69583</bug_id>
          
          <creation_ts>2011-10-06 17:05:08 -0700</creation_ts>
          <short_desc>Structure does not reset m_previous when pinning the property map</short_desc>
          <delta_ts>2011-10-06 20:43:21 -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>aroben</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>479636</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 17:05:08 -0700</bug_when>
    <thetext>We pin property maps when we do a structure transition that cannot be cached.  But we forget to clear m_previous.

This results in increased heap usage (more structures being kept alive), worse performance (more structures to trace on GC), and crashes when we try to rematerialize property maps (rematerialization asserts that m_previous is clear).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479637</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 17:05:50 -0700</bug_when>
    <thetext>Performance improvement:



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc
&quot;ResetPrevious&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc

Collected 60 samples per benchmark/VM, with 20 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             ResetPrevious                                  
SunSpider:
   3d-cube                                7.9923+-0.0130          7.9780+-0.0098       
   3d-morph                               8.1031+-0.0331    ?     8.1492+-0.0341       ?
   3d-raytrace                            8.2257+-0.0343    ?     8.2682+-0.0505       ?
   access-binary-trees                    1.8011+-0.0043          1.7997+-0.0024       
   access-fannkuch                        7.7586+-0.0323    ^     7.6967+-0.0071       ^ definitely 1.0080x faster
   access-nbody                           4.1964+-0.0078    ?     4.2001+-0.0053       ?
   access-nsieve                          3.2255+-0.0072    ?     3.2338+-0.0073       ?
   bitops-3bit-bits-in-byte               1.7317+-0.0031    ?     1.7322+-0.0028       ?
   bitops-bits-in-byte                    5.1787+-0.0204          5.1730+-0.0166       
   bitops-bitwise-and                     3.5043+-0.0181          3.5020+-0.0122       
   bitops-nsieve-bits                     5.6592+-0.0136          5.6515+-0.0139       
   controlflow-recursive                  2.2414+-0.0021    ?     2.2447+-0.0047       ?
   crypto-aes                             6.8406+-0.0503          6.8229+-0.0252       
   crypto-md5                             2.9937+-0.0095          2.9877+-0.0063       
   crypto-sha1                            2.7357+-0.0070    ?     2.7383+-0.0066       ?
   date-format-tofte                     10.6938+-0.0603         10.6338+-0.0312       
   date-format-xparb                      9.9379+-0.0384    ^     9.8098+-0.0470       ^ definitely 1.0131x faster
   math-cordic                            7.3453+-0.0422    ^     7.2226+-0.0149       ^ definitely 1.0170x faster
   math-partial-sums                     10.4460+-0.0150    ?    10.5484+-0.1296       ?
   math-spectral-norm                     3.2341+-0.0039    ?     3.2414+-0.0067       ?
   regexp-dna                            12.6540+-0.0470         12.6458+-0.0433       
   string-base64                          5.8271+-0.0270    ?     5.8331+-0.0274       ?
   string-fasta                           7.4589+-0.0126    !     7.5185+-0.0135       ! definitely 1.0080x slower
   string-tagcloud                       13.3912+-0.0431         13.3597+-0.0351       
   string-unpack-code                    24.1221+-0.0642    !    24.2937+-0.0690       ! definitely 1.0071x slower
   string-validate-input                  6.7240+-0.0456    ^     6.5689+-0.0207       ^ definitely 1.0236x faster

   &lt;arithmetic&gt; *                         7.0778+-0.0083          7.0713+-0.0096       
   &lt;geometric&gt;                            5.8002+-0.0055          5.7924+-0.0058       
   &lt;harmonic&gt;                             4.7164+-0.0041          4.7126+-0.0035       

                                            TipOfTree             ResetPrevious                                  
V8:
   crypto                                80.2459+-0.0724    ?    80.2807+-0.0756       ?
   deltablue                            248.0011+-0.4368    ^   246.6678+-0.3301       ^ definitely 1.0054x faster
   earley-boyer                         106.3520+-0.1126    ?   106.4144+-0.1251       ?
   raytrace                              65.4147+-0.1050    ^    64.5689+-0.1345       ^ definitely 1.0131x faster
   regexp                               125.9085+-0.2216    ^   124.7037+-0.2061       ^ definitely 1.0097x faster
   richards                             221.8685+-0.5928        221.5665+-0.4124       
   splay                                120.6715+-0.4878    ^   119.2831+-0.4481       ^ definitely 1.0116x faster

   &lt;arithmetic&gt;                         138.3518+-0.1436    ^   137.6407+-0.0928       ^ definitely 1.0052x faster
   &lt;geometric&gt; *                        124.6138+-0.1146    ^   123.9052+-0.0758       ^ definitely 1.0057x faster
   &lt;harmonic&gt;                           113.0429+-0.0972    ^   112.3343+-0.0700       ^ definitely 1.0063x faster

                                            TipOfTree             ResetPrevious                                  
Kraken:
   ai-astar                             827.2700+-3.6717    ?   827.5272+-3.5855       ?
   audio-beat-detection                 212.9210+-0.9801        211.8126+-0.6916       
   audio-dft                            271.3281+-0.9805        270.6702+-1.3024       
   audio-fft                            136.9794+-0.6045        136.6605+-0.1803       
   audio-oscillator                     274.6997+-1.3033        274.4814+-1.2433       
   imaging-darkroom                     491.2881+-1.3201    !   494.8206+-1.0534       ! definitely 1.0072x slower
   imaging-desaturate                   244.7313+-0.0561    ^   244.6392+-0.0259       ^ definitely 1.0004x faster
   imaging-gaussian-blur                642.0071+-0.4442    ?   643.4533+-1.1358       ?
   json-parse-financial                  62.9808+-0.0678    ^    62.1493+-0.0945       ^ definitely 1.0134x faster
   json-stringify-tinderbox              83.9892+-0.1675    !    84.6927+-0.1737       ! definitely 1.0084x slower
   stanford-crypto-aes                  150.4765+-0.6981        150.3589+-0.5822       
   stanford-crypto-ccm                  116.4817+-0.2687        116.3700+-0.2979       
   stanford-crypto-pbkdf2               228.1530+-0.7043    ?   228.8031+-0.8950       ?
   stanford-crypto-sha256-iterative      85.5514+-0.1370         85.5489+-0.1752       

   &lt;arithmetic&gt; *                       273.4898+-0.3527    ?   273.7134+-0.3297       ?
   &lt;geometric&gt;                          206.1863+-0.2213        206.1096+-0.1912       
   &lt;harmonic&gt;                           160.3540+-0.1548        160.0788+-0.1450       

                                            TipOfTree             ResetPrevious                                  
All benchmarks:
   &lt;arithmetic&gt;                         105.9860+-0.1094        105.9431+-0.1045       
   &lt;geometric&gt;                           26.5331+-0.0203    ^    26.4880+-0.0194       ^ definitely 1.0017x faster
   &lt;harmonic&gt;                             8.3011+-0.0071          8.2937+-0.0061       

                                            TipOfTree             ResetPrevious                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       62.2490+-0.0479    ^    62.1287+-0.0419       ^ definitely 1.0019x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479638</commentid>
    <comment_count>2</comment_count>
      <attachid>110062</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 17:07:05 -0700</bug_when>
    <thetext>Created attachment 110062
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479672</commentid>
    <comment_count>3</comment_count>
      <attachid>110068</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 17:42:59 -0700</bug_when>
    <thetext>Created attachment 110068
improved patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479673</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 17:46:26 -0700</bug_when>
    <thetext>Landed in r96883.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479713</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-10-06 18:51:36 -0700</bug_when>
    <thetext>Phil, does this fix bug 69555? If so, perhaps you can dupe that bug to this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479714</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 18:53:11 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Phil, does this fix bug 69555? If so, perhaps you can dupe that bug to this one.

Oh yeah, I think it does.  Will do!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479717</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 18:54:19 -0700</bug_when>
    <thetext>*** Bug 69555 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479751</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-10-06 19:59:22 -0700</bug_when>
    <thetext>Since we know this caused assertion failures (bug 69555), it seems like it should be possible to write a regression test for this fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479759</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 20:16:35 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Since we know this caused assertion failures (bug 69555), it seems like it should be possible to write a regression test for this fix.

I would have hoped so!

This is the second bug I&apos;ve fixed in our structure property map code. The last time, I tried really hard to do every possible permutation of structure transitions from JS code, and could not trigger a failure.  Not this one, and not the previous one, either.

I haven&apos;t tried to write a test case for this fail, because of the disappointment I had the last time around: https://bugs.webkit.org/show_bug.cgi?id=69102

The problem is that normal JS code execution calls materializePropertyMap() only in a few cases, and never in cases where the state of Structure* would have already been messed up (because of this bug and the other previously fixed one), and so never sees the fail.  We do however call materializePropertyMap() from the tiered compilation infrastructure.  But tiered compilation kicks in when a collection of heuristics decide that it&apos;s profitable to do so.  That ends up being stochastic.  And then it only calls materializePropertyMap() if its profiling (which is also stochastic) tells it that it&apos;s profitable.  So for sufficiently complex code, you get calls to materializePropertyMap() at random times that don&apos;t fit the pattern that would be encountered from vanilla JS code.

Forcing it to happen at exactly the right time so that materializePropertyMap() encounters the failing case, by trying to hand-write a JS test case, is rough.

What would be good, is to write unit tests for JSC::Structure.  I&apos;m not sure if that&apos;s feasible at this time, since the unit test would have to try pretty hard to bring up a full JS environment with global datas, objects, a GC heap, etc., and then perform evil structure transitions whilst repeatedly calling materializePropertyMap().  But maybe if we&apos;re doing that then we might as well resort to doing tests using JS fuzzers.

But in my past experience, the best test case for these chaotic interactions in a VM is just the application (in this case, the website) that caused them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479767</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-10-06 20:43:21 -0700</bug_when>
    <thetext>Thanks for the detailed explanation! Testing this does indeed sound tricky. Hopefully we&apos;ll eventually come up with a good way to test code like this in the future.

It would be nice to hint at at least some of these difficulties in your ChangeLogs so that the uninitiated like myself aren&apos;t left wondering why no test was checked in.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110062</attachid>
            <date>2011-10-06 17:07:05 -0700</date>
            <delta_ts>2011-10-06 17:42:59 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>clearprevious_patch_1.diff</filename>
            <type>text/plain</type>
            <size>3609</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY4NzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTEtMTAtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBT
dHJ1Y3R1cmUgZG9lcyBub3QgcmVzZXQgbV9wcmV2aW91cyB3aGVuIHBpbm5pbmcgdGhlIHByb3Bl
cnR5IG1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njk1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgaXMgYW4gMC42JSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpbiBWOCwgYW5k
IDAuMiUgb3ZlcmFsbC4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmdldHRlclNldHRlclRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisKIDIwMTEtMTAtMDYgIE9saXZl
ciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXcml0ZSBiYXJyaWVyIHNob3Vs
ZG4ndCBhbGxvY2F0ZSB0ZW1wb3JhcmllcyBpbnNpZGUgY29udHJvbCBmbG93CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDk2ODUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcwLDYgKzM3MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQ
cm90b3R5cGVUcmEKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeShnbG9iYWxEYXRhKTsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1
Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOwogICAgIHRy
YW5zaXRpb24tPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlID0gdHJ1ZTsKKyAgICB0cmFuc2l0aW9u
LT5tX3ByZXZpb3VzLmNsZWFyKCk7CiAKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KQEAgLTM4
Niw2ICszODcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UCiAg
ICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0
YSk7CiAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJv
cGVydHlUYWJsZShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKICAgICB0cmFuc2l0aW9uLT5tX2lz
UGlubmVkUHJvcGVydHlUYWJsZSA9IHRydWU7CisgICAgdHJhbnNpdGlvbi0+bV9wcmV2aW91cy5j
bGVhcigpOwogCiAgICAgaWYgKHRyYW5zaXRpb24tPm1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENv
dW50ID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKICAgICAgICAgdHJhbnNpdGlv
bi0+ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKGdsb2JhbERhdGEpOwpAQCAtNDA2LDYgKzQwOCw3IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjpnZXR0ZXJTZXR0ZXJUcmFuc2kKICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKICAgICB0cmFu
c2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pOwogICAgIHRyYW5zaXRpb24tPm1faXNQaW5uZWRQcm9wZXJ0
eVRhYmxlID0gdHJ1ZTsKKyAgICB0cmFuc2l0aW9uLT5tX3ByZXZpb3VzLmNsZWFyKCk7CiAKICAg
ICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KQEAgLTQyMCw2ICs0MjMsNyBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpCiAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCB0cmFuc2l0aW9u
KTsKICAgICB0cmFuc2l0aW9uLT5tX2lzUGlubmVkUHJvcGVydHlUYWJsZSA9IHRydWU7CiAgICAg
dHJhbnNpdGlvbi0+bV9kaWN0aW9uYXJ5S2luZCA9IGtpbmQ7CisgICAgdHJhbnNpdGlvbi0+bV9w
cmV2aW91cy5jbGVhcigpOwogCiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CkBAIC00NzMsNiAr
NDc3LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHRy
YW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGUo
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CiAgICAgdHJhbnNpdGlvbi0+bV9pc1Bpbm5lZFByb3Bl
cnR5VGFibGUgPSB0cnVlOwogICAgIHRyYW5zaXRpb24tPm1fcHJldmVudEV4dGVuc2lvbnMgPSB0
cnVlOworICAgIHRyYW5zaXRpb24tPm1fcHJldmlvdXMuY2xlYXIoKTsKIAogICAgIHJldHVybiB0
cmFuc2l0aW9uOwogfQpAQCAtNTUxLDYgKzU1Niw3IEBAIHNpemVfdCBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5V2l0aG91dFRyYW4KICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
Z2xvYmFsRGF0YSk7CiAKICAgICBtX2lzUGlubmVkUHJvcGVydHlUYWJsZSA9IHRydWU7CisgICAg
bV9wcmV2aW91cy5jbGVhcigpOwogCiAgICAgc2l6ZV90IG9mZnNldCA9IHB1dFNwZWNpZmljVmFs
dWUoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsK
ICAgICBpZiAocHJvcGVydHlTdG9yYWdlU2l6ZSgpID4gcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHko
KSkKQEAgLTU2Niw2ICs1NzIsNyBAQCBzaXplX3QgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdp
dGhvdXRUCiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEp
OwogCiAgICAgbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUgPSB0cnVlOworICAgIG1fcHJldmlvdXMu
Y2xlYXIoKTsKICAgICBzaXplX3Qgb2Zmc2V0ID0gcmVtb3ZlKHByb3BlcnR5TmFtZSk7CiAgICAg
cmV0dXJuIG9mZnNldDsKIH0K
</data>
<flag name="review"
          id="107461"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110068</attachid>
            <date>2011-10-06 17:42:59 -0700</date>
            <delta_ts>2011-10-06 17:44:10 -0700</delta_ts>
            <desc>improved patch</desc>
            <filename>clearprevious_patch_2.diff</filename>
            <type>text/plain</type>
            <size>4438</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY4ODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTEtMTAtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBT
dHJ1Y3R1cmUgZG9lcyBub3QgcmVzZXQgbV9wcmV2aW91cyB3aGVuIHBpbm5pbmcgdGhlIHByb3Bl
cnR5IG1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njk1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgaXMgYW4gMC42JSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpbiBWOCwgYW5k
IDAuMiUgb3ZlcmFsbC4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmdldHRlclNldHRlclRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorCiAyMDExLTEwLTA2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBi
dWlsZGluZyB3aXRoIGNsYW5nLCBlbmFibGUgLVdnbG9iYWwtY29uc3RydWN0b3JzIGFuZCAtV2V4
aXQtdGltZS1kZXN0cnVjdG9ycwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiA5Njg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAKICAgICBzdHJ1Y3R1
cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKICAgICB0
cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
KGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOwotICAgIHRyYW5zaXRpb24tPm1faXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlID0gdHJ1ZTsKKyAgICB0cmFuc2l0aW9uLT5waW4oKTsKIAogICAgIHJldHVybiB0
cmFuc2l0aW9uOwogfQpAQCAtMzg1LDcgKzM4NSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpk
ZXNwZWNpZnlGdW5jdGlvblQKIAogICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJs
ZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7
Ci0gICAgdHJhbnNpdGlvbi0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUgPSB0cnVlOworICAgIHRy
YW5zaXRpb24tPnBpbigpOwogCiAgICAgaWYgKHRyYW5zaXRpb24tPm1fc3BlY2lmaWNGdW5jdGlv
blRocmFzaENvdW50ID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKICAgICAgICAg
dHJhbnNpdGlvbi0+ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKGdsb2JhbERhdGEpOwpAQCAtNDA1LDcg
KzQwNSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpnZXR0ZXJTZXR0ZXJUcmFuc2kKIAogICAg
IHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEp
OwogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3Bl
cnR5VGFibGUoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7Ci0gICAgdHJhbnNpdGlvbi0+bV9pc1Bp
bm5lZFByb3BlcnR5VGFibGUgPSB0cnVlOworICAgIHRyYW5zaXRpb24tPnBpbigpOwogCiAgICAg
cmV0dXJuIHRyYW5zaXRpb247CiB9CkBAIC00MTgsOCArNDE4LDggQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaQogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7CiAgICAgdHJhbnNpdGlvbi0+bV9wcm9w
ZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCB0cmFu
c2l0aW9uKTsKLSAgICB0cmFuc2l0aW9uLT5tX2lzUGlubmVkUHJvcGVydHlUYWJsZSA9IHRydWU7
CiAgICAgdHJhbnNpdGlvbi0+bV9kaWN0aW9uYXJ5S2luZCA9IGtpbmQ7CisgICAgdHJhbnNpdGlv
bi0+cGluKCk7CiAKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KQEAgLTQ3MSw4ICs0NzEsOCBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAKICAgICBzdHJ1Y3R1
cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKICAgICB0
cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
KGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOwotICAgIHRyYW5zaXRpb24tPm1faXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlID0gdHJ1ZTsKICAgICB0cmFuc2l0aW9uLT5tX3ByZXZlbnRFeHRlbnNpb25zID0g
dHJ1ZTsKKyAgICB0cmFuc2l0aW9uLT5waW4oKTsKIAogICAgIHJldHVybiB0cmFuc2l0aW9uOwog
fQpAQCAtNTQ5LDggKzU0OSw4IEBAIHNpemVfdCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91
dFRyYW4KICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAKICAgICBtYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0KLSAgICBtX2lzUGlubmVkUHJvcGVydHlU
YWJsZSA9IHRydWU7CisgICAgCisgICAgcGluKCk7CiAKICAgICBzaXplX3Qgb2Zmc2V0ID0gcHV0
U3BlY2lmaWNWYWx1ZShnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNp
ZmljVmFsdWUpOwogICAgIGlmIChwcm9wZXJ0eVN0b3JhZ2VTaXplKCkgPiBwcm9wZXJ0eVN0b3Jh
Z2VDYXBhY2l0eSgpKQpAQCAtNTY1LDExICs1NjUsMTggQEAgc2l6ZV90IFN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlXaXRob3V0VAogCiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNz
YXJ5KGdsb2JhbERhdGEpOwogCi0gICAgbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUgPSB0cnVlOwor
ICAgIHBpbigpOwogICAgIHNpemVfdCBvZmZzZXQgPSByZW1vdmUocHJvcGVydHlOYW1lKTsKICAg
ICByZXR1cm4gb2Zmc2V0OwogfQogCit2b2lkIFN0cnVjdHVyZTo6cGluKCkKK3sKKyAgICBtX2lz
UGlubmVkUHJvcGVydHlUYWJsZSA9IHRydWU7CisgICAgbV9wcmV2aW91cy5jbGVhcigpOworICAg
IG1fbmFtZUluUHJldmlvdXMuY2xlYXIoKTsKK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RB
VFMKIAogc3RydWN0IFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDk2ODUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNiw2ICsyMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAg
ICAgIGJvb2wgaXNWYWxpZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90
eXBlQ2hhaW4pIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdm9pZCBwaW4oKTsKIAogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogCg==
</data>
<flag name="review"
          id="107467"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>