<?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>38557</bug_id>
          
          <creation_ts>2010-05-04 18:03:42 -0700</creation_ts>
          <short_desc>r58526 introduced a ~30% regression on Dromaeo JS lib</short_desc>
          <delta_ts>2010-05-14 08:59:24 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>antonm</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>vitalyr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>220914</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-04 18:03:42 -0700</bug_when>
    <thetext>This change -&gt; http://trac.webkit.org/changeset/58526

Regressed Dromaeo JS lib tests by ~30% on my machine.  That said, it was about an equally huge win on Dromaeo DOM core (awesome!), but given our no-regressions policy I&apos;d imagine we&apos;ll need to find a way to avoid the performance hit if we are to keep this in the tree.  Might be best to revert &amp; re-land a new patch, once this issue has been resolved?

The hit seems to mostly fall on the CSS style &amp; DOM traversal tests.

http://dromaeo.com/?id=102238
http://dromaeo.com/?id=102247

Darin, cc&apos;ing you as reviewer of the original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221093</commentid>
    <comment_count>1</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-05 07:12:33 -0700</bug_when>
    <thetext>Gavin, sorry for introducing that.

What is interesting there is nothing like that for Chromium: http://build.chromium.org/buildbot/perf/xp-release-single-core/dromaeo_jslib/report.html?history=350&amp;header=&amp;thumbnail=undefined&amp;rev=-1&amp;graph=jslib_traverse_prototype 

The only difference between Safari and Chromium that immediately come into my mind is change to GC policy---I haven&apos;t yet implemented retention of cached node lists in v8&apos;s bindings (will implement this week).

Gavin, if you have some spare cycles, may I ask you to comment out GC thing (this is the only change in JSNodeCustom.cpp: http://trac.webkit.org/changeset/58526/trunk/WebCore/bindings/js/JSNodeCustom.cpp) and check if it solves the problem?

If you don&apos;t have any cycles, just let me know and I&apos;ll investigate.

If possible, I&apos;d ask not to revert it for, say, a week---I&apos;ll start working on it immediately.

And just for your information: there is a pretty convenient way to compare several Dromaeo runs---just separate run ids with comma: http://dromaeo.com/?id=102238,102247

(In reply to comment #0)
&gt; This change -&gt; http://trac.webkit.org/changeset/58526
&gt; 
&gt; Regressed Dromaeo JS lib tests by ~30% on my machine.  That said, it was about
&gt; an equally huge win on Dromaeo DOM core (awesome!), but given our
&gt; no-regressions policy I&apos;d imagine we&apos;ll need to find a way to avoid the
&gt; performance hit if we are to keep this in the tree.  Might be best to revert &amp;
&gt; re-land a new patch, once this issue has been resolved?
&gt; 
&gt; The hit seems to mostly fall on the CSS style &amp; DOM traversal tests.
&gt; 
&gt; http://dromaeo.com/?id=102238
&gt; http://dromaeo.com/?id=102247
&gt; 
&gt; Darin, cc&apos;ing you as reviewer of the original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221152</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-05 09:50:22 -0700</bug_when>
    <thetext>My thoughts would be to see whether the cost is in GC overhead (that being the obvious culprit if we&apos;re now caching GC objects) and failing that i would look at what is causing us to miss the cache (which would be the second most obvious culprit)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221512</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-05 22:40:27 -0700</bug_when>
    <thetext>Hi Anton,

I&apos;m fairly snowed under myself this week, so Sam Weinig has kindly offered to step in for me and try to help.  I think he plans to start with the basics, take some shark profiles &amp; see what shows up.  I&apos;m sure he&apos;ll let you know once he has any info.

many thanks,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221745</commentid>
    <comment_count>4</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 09:45:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Hi Anton,
&gt; 
&gt; I&apos;m fairly snowed under myself this week, so Sam Weinig has kindly offered to
&gt; step in for me and try to help.  I think he plans to start with the basics,
&gt; take some shark profiles &amp; see what shows up.  I&apos;m sure he&apos;ll let you know once
&gt; he has any info.
&gt; 
&gt; many thanks,
&gt; G.

Sure, Gavin.

So the main suspect is GC for now: http://dromaeo.com/?id=102562,102570,102580 . First one is head of WebKit, the second one is head of WebKit with my change backed out, the last one is head of WebKit with the following change:

$ git diff
diff --git a/WebCore/bindings/js/JSNodeCustom.cpp b/WebCore/bindings/js/JSNodeCu
index 6d61037..c2ff970 100644
--- a/WebCore/bindings/js/JSNodeCustom.cpp
+++ b/WebCore/bindings/js/JSNodeCustom.cpp
@@ -179,7 +179,7 @@ void JSNode::markChildren(MarkStack&amp; markStack)

     Node* node = m_impl.get();
     node-&gt;markJSEventListeners(markStack);
-    node-&gt;markCachedNodeLists(markStack, *Heap::heap(this)-&gt;globalData());
+    // node-&gt;markCachedNodeLists(markStack, *Heap::heap(this)-&gt;globalData());

     // Nodes in the document are kept alive by JSDocument::mark, so, if we&apos;re i
     // the document, we need to mark the document, but we don&apos;t need to explici

That&apos;s on windows box, but I hope to repro it on MBP as well.  Looking further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221748</commentid>
    <comment_count>5</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 09:46:30 -0700</bug_when>
    <thetext>And I assign it to myself.  But if anyone else wishes to grab it, that&apos;s fine, I&apos;ll still keep investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221752</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-06 09:48:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; -    node-&gt;markCachedNodeLists(markStack, *Heap::heap(this)-&gt;globalData());
&gt; +    // node-&gt;markCachedNodeLists(markStack, *Heap::heap(this)-&gt;globalData());

To get maximum speed on this line of code, we need to make sure we do the minimum amount of work on nodes without outstanding node lists. Finding the heap for &quot;this&quot; so we can get the global data pointer is one example of unwanted work. Also, we need to inline much of the checking for node lists, including at least the rare data bit check and possibly also the rare data hash table lookup and then the subsequent check for the cached node lists pointer inside the rare data structure.

At the moment, I believe we do have the rare data bit check inlined, so the issue may be the overhead in getting the global data pointer.

If worse comes to worst we might have to devote a bit in the Node to indicating whether we have any cached node lists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221755</commentid>
    <comment_count>7</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 09:51:41 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; -    node-&gt;markCachedNodeLists(markStack, *Heap::heap(this)-&gt;globalData());
&gt; &gt; +    // node-&gt;markCachedNodeLists(markStack, *Heap::heap(this)-&gt;globalData());
&gt; 
&gt; To get maximum speed on this line of code, we need to make sure we do the
&gt; minimum amount of work on nodes without outstanding node lists. Finding the
&gt; heap for &quot;this&quot; so we can get the global data pointer is one example of
&gt; unwanted work. Also, we need to inline much of the checking for node lists,
&gt; including at least the rare data bit check and possibly also the rare data hash
&gt; table lookup and then the subsequent check for the cached node lists pointer
&gt; inside the rare data structure.
&gt; 
&gt; At the moment, I believe we do have the rare data bit check inlined, so the
&gt; issue may be the overhead in getting the global data pointer.
&gt; 
&gt; If worse comes to worst we might have to devote a bit in the Node to indicating
&gt; whether we have any cached node lists.

Agree, and thanks a lot for your suggestions.  Will investigate various approaches.  I inlined by your suggestion a fast check for presence of rare data, but will start with inlining the check for presence of cached node lists.  Let&apos;s hope it&apos;s not a node with tons on node lists cached on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221758</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-06 09:54:21 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I inlined by your suggestion a fast check for presence of rare
&gt; data, but will start with inlining the check for presence of cached node lists.
&gt;  Let&apos;s hope it&apos;s not a node with tons on node lists cached on it.

I think that instead, the right first step is to restructure to eliminate the call to *Heap::heap(this)-&gt;globalData() when rare data is not present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221760</commentid>
    <comment_count>9</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 09:55:49 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; I inlined by your suggestion a fast check for presence of rare
&gt; &gt; data, but will start with inlining the check for presence of cached node lists.
&gt; &gt;  Let&apos;s hope it&apos;s not a node with tons on node lists cached on it.
&gt; 
&gt; I think that instead, the right first step is to restructure to eliminate the
&gt; call to *Heap::heap(this)-&gt;globalData() when rare data is not present.

Thanks a lot, Darin, going to give it a try right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221763</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-06 09:58:03 -0700</bug_when>
    <thetext>The easiest way is probably to remove the JSGlobalData* argument and add a JSObject* argument instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221849</commentid>
    <comment_count>11</comment_count>
      <attachid>55276</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 11:36:58 -0700</bug_when>
    <thetext>Created attachment 55276
Late Heap lookup

Alas, this doesn&apos;t solve the problem.  Any obvious mistakes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221887</commentid>
    <comment_count>12</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 12:40:09 -0700</bug_when>
    <thetext>[+ Vitaly]

So we carried out couple of experiments.  Current results:

1) speeding up fast checks doesn&apos;t help: see patch above, I ran another patch which uses bit flag when cached node lists are present---regression still persists;

2) heap profiler (in Chromium) hints that Dromaeo tests retain documents (one per suite like &quot;DOM Attributes (jQuery)&quot; and those apparently keep node lists;

3) if one runs &apos;regressed suite&apos; separately, omitting suites before, there is no regression: http://dromaeo.com/?id=102605,102610

So the best hypothesis for now (which I will check tomorrow) is we&apos;ve got &apos;leaked&apos; cached node lists which sit and make subsequent GCs slower.

If that&apos;s true, ideally Dromaeo should have cleaned up its garbage (and I&apos;ll experiment with it nulling out globals in suites).

But anyway, esp. as JSC heap is not segregated by DOMWindow yet, we probably need to collect node lists if they don&apos;t have custom properties set.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221929</commentid>
    <comment_count>13</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 13:36:03 -0700</bug_when>
    <thetext>BTW, Darin, do you remember why it was decided that we need to retain cached node lists as long as node is alive?  I remember it was due to failing layout tests, but is it indeed desired semantics?

I&apos;ll check tomorrow HTML5 wording, but any insights are most appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221996</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-06 15:13:17 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; BTW, Darin, do you remember why it was decided that we need to retain cached
&gt; node lists as long as node is alive?  I remember it was due to failing layout
&gt; tests, but is it indeed desired semantics?
&gt; 
&gt; I&apos;ll check tomorrow HTML5 wording, but any insights are most appreciated.

The general principle is that garbage collection must not be detectable. So if someone adds custom properties to a node list it’s important we don’t lose those. That’s the main concept. The rest is just about performance tuning, I suppose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222044</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-06 16:31:42 -0700</bug_when>
    <thetext>I did the experiment of running the whole Dromaeo JavaScript Library Test and sharking just &quot;DOM Traversal (Prototype)&quot; (that one was particularly slow.  It seems an exorbitant amount of time is being spent creating the emptyValue QualifiedName for the TagNodeListCache in markNodeLists.  The emptyValue Qualified name can be greatly simplified in one of two ways, 1) use a 0 value for QualifiedName::m_impl or 2) use a static global.  I am trying #1 now and will report back the results.

In addition, I am going to investigate adding a call to hasCustomProperties() in markDOMObjectWrapper (or something similar that actually works, like adding a new version of markDOMObjectWrapper that does this) to avoid keeping alive the wrappers when there are no observable properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222169</commentid>
    <comment_count>16</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 22:25:12 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; BTW, Darin, do you remember why it was decided that we need to retain cached
&gt; &gt; node lists as long as node is alive?  I remember it was due to failing layout
&gt; &gt; tests, but is it indeed desired semantics?
&gt; &gt; 
&gt; &gt; I&apos;ll check tomorrow HTML5 wording, but any insights are most appreciated.
&gt; 
&gt; The general principle is that garbage collection must not be detectable. So if
&gt; someone adds custom properties to a node list it’s important we don’t lose
&gt; those. That’s the main concept. The rest is just about performance tuning, I
&gt; suppose.

Darin, I&apos;ll respond somewhat later---I need to carry on couple of experiments before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222170</commentid>
    <comment_count>17</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-06 22:26:56 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I did the experiment of running the whole Dromaeo JavaScript Library Test and
&gt; sharking just &quot;DOM Traversal (Prototype)&quot; (that one was particularly slow.  It
&gt; seems an exorbitant amount of time is being spent creating the emptyValue
&gt; QualifiedName for the TagNodeListCache in markNodeLists.  The emptyValue
&gt; Qualified name can be greatly simplified in one of two ways, 1) use a 0 value
&gt; for QualifiedName::m_impl or 2) use a static global.  I am trying #1 now and
&gt; will report back the results.
&gt; 
&gt; In addition, I am going to investigate adding a call to hasCustomProperties()
&gt; in markDOMObjectWrapper (or something similar that actually works, like adding
&gt; a new version of markDOMObjectWrapper that does this) to avoid keeping alive
&gt; the wrappers when there are no observable properties.

Sam, thanks a lot.  Any news about your experiments?  I am asking as in ~3 hrs I&apos;ll start working on it and I&apos;d rather not duplicate the work you&apos;re already doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222532</commentid>
    <comment_count>18</comment_count>
      <attachid>55404</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-07 12:15:30 -0700</bug_when>
    <thetext>Created attachment 55404
Next patch: faster emptyValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222539</commentid>
    <comment_count>19</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-07 12:17:54 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created an attachment (id=55404) [details]
&gt; Next patch: faster emptyValue

This patch restores notable amount of score for me---this is all due to faster emptyValue (thanks to Sam&apos;s investigation).  Would appreciate if anyone else checks if it helps on their box.  So the main suspect for now would be iteration over cached node lists.  I am going to use NodeListsNodeData::m_listsWithCaches to see if it&apos;ll help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222559</commentid>
    <comment_count>20</comment_count>
      <attachid>55408</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-07 12:37:37 -0700</bug_when>
    <thetext>Created attachment 55408
My emptyValue patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222711</commentid>
    <comment_count>21</comment_count>
      <attachid>55404</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-07 17:05:43 -0700</bug_when>
    <thetext>Comment on attachment 55404
Next patch: faster emptyValue

This is another copy of your JSGlobalData patch, not an emptyValue one.

I like Sam&apos;s approach to the emptyValue issue -- I suggest we use his.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222730</commentid>
    <comment_count>22</comment_count>
      <attachid>55442</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-07 17:47:36 -0700</bug_when>
    <thetext>Created attachment 55442
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222731</commentid>
    <comment_count>23</comment_count>
      <attachid>55442</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-07 17:48:42 -0700</bug_when>
    <thetext>Comment on attachment 55442
Fix

&gt; +        - Only mark cached NodeLists on Documents instead of all Nodes.

Why is this OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222971</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-08 23:15:51 -0700</bug_when>
    <thetext>Attachment 55442 was posted by a committer and has review+, assigning to Sam Weinig for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223060</commentid>
    <comment_count>25</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-09 13:34:58 -0700</bug_when>
    <thetext>Landed in r59058.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223920</commentid>
    <comment_count>26</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-11 07:35:31 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 55404 [details])
&gt; This is another copy of your JSGlobalData patch, not an emptyValue one.
&gt; 
&gt; I like Sam&apos;s approach to the emptyValue issue -- I suggest we use his.

Sorry, wrong patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223921</commentid>
    <comment_count>27</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-11 07:36:16 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 55442 [details])
&gt; &gt; +        - Only mark cached NodeLists on Documents instead of all Nodes.
&gt; 
&gt; Why is this OK?

I&apos;d be curious to know as well.  And thanks a lot for fixing the problem, Sam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223998</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-11 10:34:34 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #23)
&gt; &gt; (From update of attachment 55442 [details] [details])
&gt; &gt; &gt; +        - Only mark cached NodeLists on Documents instead of all Nodes.
&gt; &gt; 
&gt; &gt; Why is this OK?
&gt; 
&gt; I&apos;d be curious to know as well.  And thanks a lot for fixing the problem, Sam.

Sam answered my question in person. Sam, when you get a chance can you comment here in writing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225748</commentid>
    <comment_count>29</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-05-14 04:15:14 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; (From update of attachment 55442 [details] [details] [details])
&gt; &gt; &gt; &gt; +        - Only mark cached NodeLists on Documents instead of all Nodes.
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this OK?
&gt; &gt; 
&gt; &gt; I&apos;d be curious to know as well.  And thanks a lot for fixing the problem, Sam.
&gt; 
&gt; Sam answered my question in person. Sam, when you get a chance can you comment here in writing?

Sam, Darin,

sorry for being pushy, but could you clarify the story with Document?  I&apos;d like to adjust v8&apos;s GC as well, but would like to have it as similar to JSC as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225859</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-14 08:59:24 -0700</bug_when>
    <thetext>Sam should answer the question. Here&apos;s what I remember: Part of the answer is that almost all use of these functions is on Document. Another part is that collection of the JavaScript wrapper only affects the lifetime of custom properties on the node list in cases where no one is retaining a pointer to that list.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55276</attachid>
            <date>2010-05-06 11:36:58 -0700</date>
            <delta_ts>2010-05-06 11:36:58 -0700</delta_ts>
            <desc>Late Heap lookup</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>2527</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
LmgJKHJldmlzaW9uIDU4ODI2KQorKysgV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTR2xvYmFs
RGF0YTsKKyAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBNYXJrU3RhY2s7CiAKIH0KQEAg
LTU4MCwxMyArNTgxLDEzIEBACiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSgpOwogCiAjaWYgVVNFKEpTQykKLSAgICB2b2lkIG1hcmtDYWNoZWROb2Rl
TGlzdHMoSlNDOjpNYXJrU3RhY2smIG1hcmtTdGFjaywgSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgdm9pZCBtYXJrQ2FjaGVkTm9kZUxpc3RzKEpTQzo6TWFya1N0YWNrJiBtYXJr
U3RhY2ssIEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpCiAgICAgewogICAgICAgICAvLyBOb2RlTGlz
dHMgbWF5IGJlIHByZXNlbnQuICBJZiBzbywgdGhleSBuZWVkIHRvIGJlIG1hcmtlZC4KICAgICAg
ICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1h
cmtDYWNoZWROb2RlTGlzdHNTbG93KG1hcmtTdGFjaywgZ2xvYmFsRGF0YSk7CisgICAgICAgIG1h
cmtDYWNoZWROb2RlTGlzdHNTbG93KG1hcmtTdGFjaywgd3JhcHBlcik7CiAgICAgfQogI2VuZGlm
CiAKQEAgLTYxMiw3ICs2MTMsNyBAQAogCiBwcml2YXRlOgogI2lmIFVTRShKU0MpCi0gICAgdm9p
ZCBtYXJrQ2FjaGVkTm9kZUxpc3RzU2xvdyhKU0M6Ok1hcmtTdGFjayYsIEpTQzo6SlNHbG9iYWxE
YXRhJik7CisgICAgdm9pZCBtYXJrQ2FjaGVkTm9kZUxpc3RzU2xvdyhKU0M6Ok1hcmtTdGFjayYs
IEpTQzo6SlNPYmplY3QqKTsKICNlbmRpZgogCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbFJlZkNv
dW50KENvbnN0cnVjdGlvblR5cGUpOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDU4ODI2KQorKysgV2ViQ29y
ZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NjQsMTIgKzI1NjQsMTMgQEAKICAg
ICAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBnbG9iYWxEYXRhLCBpdC0+c2Vj
b25kKTsKIH0KIAotdm9pZCBOb2RlOjptYXJrQ2FjaGVkTm9kZUxpc3RzU2xvdyhKU0M6Ok1hcmtT
dGFjayYgbWFya1N0YWNrLCBKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgTm9k
ZTo6bWFya0NhY2hlZE5vZGVMaXN0c1Nsb3coSlNDOjpNYXJrU3RhY2smIG1hcmtTdGFjaywgSlND
OjpKU09iamVjdCogd3JhcHBlcikKIHsKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3Rz
ID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7CiAgICAgaWYgKCFub2RlTGlzdHMpCiAgICAgICAg
IHJldHVybjsKIAorICAgIEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKkpTQzo6SGVh
cDo6aGVhcCh3cmFwcGVyKS0+Z2xvYmFsRGF0YSgpOwogICAgIG1hcmtOb2RlTGlzdHMobm9kZUxp
c3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZSwgbWFya1N0YWNrLCBnbG9iYWxEYXRhKTsKICAgICBt
YXJrTm9kZUxpc3RzKG5vZGVMaXN0cy0+bV9uYW1lTm9kZUxpc3RDYWNoZSwgbWFya1N0YWNrLCBn
bG9iYWxEYXRhKTsKICAgICBtYXJrTm9kZUxpc3RzKG5vZGVMaXN0cy0+bV90YWdOb2RlTGlzdENh
Y2hlLCBtYXJrU3RhY2ssIGdsb2JhbERhdGEpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmNwcAkocmV2aXNpb24gNTg4MjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgTm9k
ZSogbm9kZSA9IG1faW1wbC5nZXQoKTsKICAgICBub2RlLT5tYXJrSlNFdmVudExpc3RlbmVycyht
YXJrU3RhY2spOwotICAgIG5vZGUtPm1hcmtDYWNoZWROb2RlTGlzdHMobWFya1N0YWNrLCAqSGVh
cDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBub2RlLT5tYXJrQ2FjaGVkTm9kZUxp
c3RzKG1hcmtTdGFjaywgdGhpcyk7CiAKICAgICAvLyBOb2RlcyBpbiB0aGUgZG9jdW1lbnQgYXJl
IGtlcHQgYWxpdmUgYnkgSlNEb2N1bWVudDo6bWFyaywgc28sIGlmIHdlJ3JlIGluCiAgICAgLy8g
dGhlIGRvY3VtZW50LCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qg
bmVlZCB0byBleHBsaWNpdGx5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55404</attachid>
            <date>2010-05-07 12:15:30 -0700</date>
            <delta_ts>2010-05-07 17:05:43 -0700</delta_ts>
            <desc>Next patch: faster emptyValue</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>2527</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
LmgJKHJldmlzaW9uIDU4ODI2KQorKysgV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTR2xvYmFs
RGF0YTsKKyAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBNYXJrU3RhY2s7CiAKIH0KQEAg
LTU4MCwxMyArNTgxLDEzIEBACiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSgpOwogCiAjaWYgVVNFKEpTQykKLSAgICB2b2lkIG1hcmtDYWNoZWROb2Rl
TGlzdHMoSlNDOjpNYXJrU3RhY2smIG1hcmtTdGFjaywgSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgdm9pZCBtYXJrQ2FjaGVkTm9kZUxpc3RzKEpTQzo6TWFya1N0YWNrJiBtYXJr
U3RhY2ssIEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpCiAgICAgewogICAgICAgICAvLyBOb2RlTGlz
dHMgbWF5IGJlIHByZXNlbnQuICBJZiBzbywgdGhleSBuZWVkIHRvIGJlIG1hcmtlZC4KICAgICAg
ICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1h
cmtDYWNoZWROb2RlTGlzdHNTbG93KG1hcmtTdGFjaywgZ2xvYmFsRGF0YSk7CisgICAgICAgIG1h
cmtDYWNoZWROb2RlTGlzdHNTbG93KG1hcmtTdGFjaywgd3JhcHBlcik7CiAgICAgfQogI2VuZGlm
CiAKQEAgLTYxMiw3ICs2MTMsNyBAQAogCiBwcml2YXRlOgogI2lmIFVTRShKU0MpCi0gICAgdm9p
ZCBtYXJrQ2FjaGVkTm9kZUxpc3RzU2xvdyhKU0M6Ok1hcmtTdGFjayYsIEpTQzo6SlNHbG9iYWxE
YXRhJik7CisgICAgdm9pZCBtYXJrQ2FjaGVkTm9kZUxpc3RzU2xvdyhKU0M6Ok1hcmtTdGFjayYs
IEpTQzo6SlNPYmplY3QqKTsKICNlbmRpZgogCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbFJlZkNv
dW50KENvbnN0cnVjdGlvblR5cGUpOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDU4ODI2KQorKysgV2ViQ29y
ZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NjQsMTIgKzI1NjQsMTMgQEAKICAg
ICAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBnbG9iYWxEYXRhLCBpdC0+c2Vj
b25kKTsKIH0KIAotdm9pZCBOb2RlOjptYXJrQ2FjaGVkTm9kZUxpc3RzU2xvdyhKU0M6Ok1hcmtT
dGFjayYgbWFya1N0YWNrLCBKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgTm9k
ZTo6bWFya0NhY2hlZE5vZGVMaXN0c1Nsb3coSlNDOjpNYXJrU3RhY2smIG1hcmtTdGFjaywgSlND
OjpKU09iamVjdCogd3JhcHBlcikKIHsKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3Rz
ID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7CiAgICAgaWYgKCFub2RlTGlzdHMpCiAgICAgICAg
IHJldHVybjsKIAorICAgIEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKkpTQzo6SGVh
cDo6aGVhcCh3cmFwcGVyKS0+Z2xvYmFsRGF0YSgpOwogICAgIG1hcmtOb2RlTGlzdHMobm9kZUxp
c3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZSwgbWFya1N0YWNrLCBnbG9iYWxEYXRhKTsKICAgICBt
YXJrTm9kZUxpc3RzKG5vZGVMaXN0cy0+bV9uYW1lTm9kZUxpc3RDYWNoZSwgbWFya1N0YWNrLCBn
bG9iYWxEYXRhKTsKICAgICBtYXJrTm9kZUxpc3RzKG5vZGVMaXN0cy0+bV90YWdOb2RlTGlzdENh
Y2hlLCBtYXJrU3RhY2ssIGdsb2JhbERhdGEpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmNwcAkocmV2aXNpb24gNTg4MjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgTm9k
ZSogbm9kZSA9IG1faW1wbC5nZXQoKTsKICAgICBub2RlLT5tYXJrSlNFdmVudExpc3RlbmVycyht
YXJrU3RhY2spOwotICAgIG5vZGUtPm1hcmtDYWNoZWROb2RlTGlzdHMobWFya1N0YWNrLCAqSGVh
cDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBub2RlLT5tYXJrQ2FjaGVkTm9kZUxp
c3RzKG1hcmtTdGFjaywgdGhpcyk7CiAKICAgICAvLyBOb2RlcyBpbiB0aGUgZG9jdW1lbnQgYXJl
IGtlcHQgYWxpdmUgYnkgSlNEb2N1bWVudDo6bWFyaywgc28sIGlmIHdlJ3JlIGluCiAgICAgLy8g
dGhlIGRvY3VtZW50LCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qg
bmVlZCB0byBleHBsaWNpdGx5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55408</attachid>
            <date>2010-05-07 12:37:37 -0700</date>
            <delta_ts>2010-05-07 12:37:37 -0700</delta_ts>
            <desc>My emptyValue patch</desc>
            <filename>patchFast.diff</filename>
            <type>text/plain</type>
            <size>1844</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05v
ZGUuY3BwCShyZXZpc2lvbiA1ODkwNCkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEwLDggKzEwMTAsOCBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZFRhZ05v
ZGVMaXN0KFRhZ05vCiAgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNPd25DYWNoZXMo
KSk7CiAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0
cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX3RhZ05vZGVMaXN0
Q2FjaGUuZ2V0KG5hbWUpKTsKLSAgICBkYXRhLT5tX3RhZ05vZGVMaXN0Q2FjaGUucmVtb3ZlKG5h
bWUpOworICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX3RhZ05vZGVMaXN0
Q2FjaGUuZ2V0KG5hbWUuaW1wbCgpKSk7CisgICAgZGF0YS0+bV90YWdOb2RlTGlzdENhY2hlLnJl
bW92ZShuYW1lLmltcGwoKSk7CiB9CiAKIE5vZGUgKk5vZGU6OnRyYXZlcnNlTmV4dE5vZGUoY29u
c3QgTm9kZSAqc3RheVdpdGhpbikgY29uc3QKQEAgLTE2NDQsNyArMTY0NCw3IEBAIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICAKICAgICBBdG9taWNTdHJpbmcg
bG9jYWxOYW1lQXRvbSA9IG5hbWU7CiAgICAgICAgIAotICAgIHBhaXI8Tm9kZUxpc3RzTm9kZURh
dGE6OlRhZ05vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBkYXRhLT5ub2Rl
TGlzdHMoKS0+bV90YWdOb2RlTGlzdENhY2hlLmFkZChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBs
b2NhbE5hbWVBdG9tLCBuYW1lc3BhY2VVUkkpLCAwKTsKKyAgICBwYWlyPE5vZGVMaXN0c05vZGVE
YXRhOjpUYWdOb2RlTGlzdENhY2hlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gZGF0YS0+bm9k
ZUxpc3RzKCktPm1fdGFnTm9kZUxpc3RDYWNoZS5hZGQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
bG9jYWxOYW1lQXRvbSwgbmFtZXNwYWNlVVJJKS5pbXBsKCksIDApOwogICAgIGlmICghcmVzdWx0
LnNlY29uZCkKICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8VGFnTm9kZUxpc3Q+KHJlc3VsdC5m
aXJzdC0+c2Vjb25kKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiA1ODkwNCkK
KysrIFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIHN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YSA6IE5vbmNvcHlhYmxlIHsKICAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBOYW1lTm9kZUxpc3QqPiBOYW1lTm9kZUxpc3RDYWNoZTsKICAg
ICBOYW1lTm9kZUxpc3RDYWNoZSBtX25hbWVOb2RlTGlzdENhY2hlOwogICAgIAotICAgIHR5cGVk
ZWYgSGFzaE1hcDxRdWFsaWZpZWROYW1lLCBUYWdOb2RlTGlzdCo+IFRhZ05vZGVMaXN0Q2FjaGU7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1l
SW1wbD4sIFRhZ05vZGVMaXN0Kj4gVGFnTm9kZUxpc3RDYWNoZTsKICAgICBUYWdOb2RlTGlzdENh
Y2hlIG1fdGFnTm9kZUxpc3RDYWNoZTsKIAogICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVMaXN0
c05vZGVEYXRhPiBjcmVhdGUoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55442</attachid>
            <date>2010-05-07 17:47:36 -0700</date>
            <delta_ts>2010-05-07 18:01:15 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>dromaeo.diff</filename>
            <type>text/plain</type>
            <size>4221</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODk4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDUtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODU1NworICAgICAgICBy
NTg1MjYgaW50cm9kdWNlZCBhIH4zMCUgcmVncmVzc2lvbiBvbiBEcm9tYWVvIEpTIGxpYgorCisg
ICAgICAgIFRoaXMgZml4IGRvZXMgdHdvIHRoaW5ncy4KKyAgICAgICAgLSBEb24ndCB1c2UgUXVh
bGlmaWVkTmFtZSBhcyB0aGUga2V5IHRvIGEgSGFzaE1hcCwgdXNlIGEKKyAgICAgICAgICBSZWZQ
dHI8UXVhbGlmaWVkTmFtZT4gaW5zdGVhZC4gIFdlIHNob3VsZCByZW1vdmUgdGhlIEhhc2hUcmFp
dHMgZm9yCisgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhbmQgdGhhdCB3aWxsIGhhcHBlbiBpbiBh
IGZvbGxvdyB1cCBwYXRjaC4KKyAgICAgICAgLSBPbmx5IG1hcmsgY2FjaGVkIE5vZGVMaXN0cyBv
biBEb2N1bWVudHMgaW5zdGVhZCBvZiBhbGwgTm9kZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6Om1h
cmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBkb20vTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW1vdmVDYWNoZWRUYWdOb2RlTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TKToKKyAgICAg
ICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisKIDIwMTAtMDUtMDcgIEJldGggRGFraW4gIDxiZGFr
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTg5MDQp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw2ICs1Niw3IEBAIHZvaWQgSlNEb2N1bWVudDo6bWFya0NoaWxkcmVuKE1hcmtT
dGFjayYKICAgICBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQobWFya1N0YWNrLCBnbG9iYWxE
YXRhLCBkb2N1bWVudCk7CiAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBnbG9i
YWxEYXRhLCBkb2N1bWVudC0+aW1wbGVtZW50YXRpb24oKSk7CiAgICAgbWFya0RPTU9iamVjdFdy
YXBwZXIobWFya1N0YWNrLCBnbG9iYWxEYXRhLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKSk7Cisg
ICAgZG9jdW1lbnQtPm1hcmtDYWNoZWROb2RlTGlzdHMobWFya1N0YWNrLCBnbG9iYWxEYXRhKTsK
IH0KIAogSlNWYWx1ZSBKU0RvY3VtZW50Ojpsb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiA1ODkwNCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc5LDcgKzE3OSw2IEBAIHZvaWQgSlNOb2RlOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBt
YXIKIAogICAgIE5vZGUqIG5vZGUgPSBtX2ltcGwuZ2V0KCk7CiAgICAgbm9kZS0+bWFya0pTRXZl
bnRMaXN0ZW5lcnMobWFya1N0YWNrKTsKLSAgICBub2RlLT5tYXJrQ2FjaGVkTm9kZUxpc3RzKG1h
cmtTdGFjaywgKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKSk7CiAKICAgICAvLyBOb2Rl
cyBpbiB0aGUgZG9jdW1lbnQgYXJlIGtlcHQgYWxpdmUgYnkgSlNEb2N1bWVudDo6bWFyaywgc28s
IGlmIHdlJ3JlIGluCiAgICAgLy8gdGhlIGRvY3VtZW50LCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGRv
Y3VtZW50LCBidXQgd2UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5CkluZGV4OiBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24g
NTg5MDQpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMCw4
ICsxMDEwLDggQEAgdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdObwogICAg
IEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkpOwogCiAgICAgTm9kZUxp
c3RzTm9kZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKGxpc3QsIGxpc3QgPT0gZGF0YS0+bV90YWdOb2RlTGlzdENhY2hlLmdldChuYW1lKSk7
Ci0gICAgZGF0YS0+bV90YWdOb2RlTGlzdENhY2hlLnJlbW92ZShuYW1lKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGxpc3QsIGxpc3QgPT0gZGF0YS0+bV90YWdOb2RlTGlzdENhY2hlLmdldChuYW1lLmlt
cGwoKSkpOworICAgIGRhdGEtPm1fdGFnTm9kZUxpc3RDYWNoZS5yZW1vdmUobmFtZS5pbXBsKCkp
OwogfQogCiBOb2RlICpOb2RlOjp0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUgKnN0YXlXaXRo
aW4pIGNvbnN0CkBAIC0xNjQ0LDcgKzE2NDQsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2Rl
OjpnZXRFbGVtZW50c0J5CiAgICAgCiAgICAgQXRvbWljU3RyaW5nIGxvY2FsTmFtZUF0b20gPSBu
YW1lOwogICAgICAgICAKLSAgICBwYWlyPE5vZGVMaXN0c05vZGVEYXRhOjpUYWdOb2RlTGlzdENh
Y2hlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fdGFnTm9k
ZUxpc3RDYWNoZS5hZGQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lQXRvbSwgbmFt
ZXNwYWNlVVJJKSwgMCk7CisgICAgcGFpcjxOb2RlTGlzdHNOb2RlRGF0YTo6VGFnTm9kZUxpc3RD
YWNoZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX3RhZ05v
ZGVMaXN0Q2FjaGUuYWRkKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZUF0b20sIG5h
bWVzcGFjZVVSSSkuaW1wbCgpLCAwKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCiAgICAgICAg
IHJldHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuZmlyc3QtPnNlY29uZCk7CiAg
ICAgCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24gNTg5MDQpCisrKyBXZWJDb3JlL2RvbS9O
b2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgTm9k
ZUxpc3RzTm9kZURhdGEgOiBOb25jb3B5YWJsZSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgTmFtZU5vZGVMaXN0Kj4gTmFtZU5vZGVMaXN0Q2FjaGU7CiAgICAgTmFtZU5vZGVMaXN0Q2Fj
aGUgbV9uYW1lTm9kZUxpc3RDYWNoZTsKICAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlm
aWVkTmFtZSwgVGFnTm9kZUxpc3QqPiBUYWdOb2RlTGlzdENhY2hlOworICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGw+LCBUYWdOb2RlTGlz
dCo+IFRhZ05vZGVMaXN0Q2FjaGU7CiAgICAgVGFnTm9kZUxpc3RDYWNoZSBtX3RhZ05vZGVMaXN0
Q2FjaGU7CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gY3JlYXRl
KCkK
</data>
<flag name="review"
          id="39626"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>