<?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>101820</bug_id>
          
          <creation_ts>2012-11-09 17:38:14 -0800</creation_ts>
          <short_desc>axObjectCache code is more complicated than necessary</short_desc>
          <delta_ts>2012-11-12 12:25:23 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>763496</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-09 17:38:14 -0800</bug_when>
    <thetext>axObjectCache code is more complicated than necessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763497</commentid>
    <comment_count>1</comment_count>
      <attachid>173416</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-09 17:39:36 -0800</bug_when>
    <thetext>Created attachment 173416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763526</commentid>
    <comment_count>2</comment_count>
      <attachid>173416</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-09 18:13:02 -0800</bug_when>
    <thetext>Comment on attachment 173416
Patch

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

&gt; Source/WebCore/dom/Document.cpp:2204
&gt; +    // Clear the cache member variable before calling delete because attempts
&gt; +    // are made to access it during destruction.
&gt; +    OwnPtr&lt;AXObjectCache&gt; axObjectCache = topDocument()-&gt;m_axObjectCache.release();

No need to put the result of release into a local variable. This can just be:

    topDocument()-&gt;m_axObjectCache.release();

&gt; Source/WebCore/dom/Document.cpp:2223
&gt; +    Document* document = topDocument();
&gt; +    ASSERT(document == this || !m_axObjectCache);
&gt; +    if (document-&gt;m_axObjectCache)
&gt; +        return document-&gt;m_axObjectCache.get();
&gt; +    document-&gt;m_axObjectCache = adoptPtr(new AXObjectCache(this));
&gt; +    return document-&gt;m_axObjectCache.get();

I prefer to write such things as:

    if (!document-&gt;m_axObjectCache)
        document-&gt;m_axObjectCache = adoptPtr(new AXObjectCache(this));
    return document-&gt;m_axObjectCache.get();

But also, I suggest writing this instead:

    ASSERT(this = topDocument() || !m_axObjectCache);
    if (!m_axObjectCache)
        m_axObjectCache = adoptPtr(new AXObjectCache(this));
    return m_axObjectCache.get();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763531</commentid>
    <comment_count>3</comment_count>
      <attachid>173416</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-09 18:15:16 -0800</bug_when>
    <thetext>Comment on attachment 173416
Patch

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

&gt;&gt; Source/WebCore/dom/Document.cpp:2223
&gt;&gt; +    return document-&gt;m_axObjectCache.get();
&gt; 
&gt; I prefer to write such things as:
&gt; 
&gt;     if (!document-&gt;m_axObjectCache)
&gt;         document-&gt;m_axObjectCache = adoptPtr(new AXObjectCache(this));
&gt;     return document-&gt;m_axObjectCache.get();
&gt; 
&gt; But also, I suggest writing this instead:
&gt; 
&gt;     ASSERT(this = topDocument() || !m_axObjectCache);
&gt;     if (!m_axObjectCache)
&gt;         m_axObjectCache = adoptPtr(new AXObjectCache(this));
&gt;     return m_axObjectCache.get();

Oops!

    ASSERT(this == topDocument() || !m_axObjectCache);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763898</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-11 15:29:12 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 173416 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173416&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:2204
&gt; &gt; +    // Clear the cache member variable before calling delete because attempts
&gt; &gt; +    // are made to access it during destruction.
&gt; &gt; +    OwnPtr&lt;AXObjectCache&gt; axObjectCache = topDocument()-&gt;m_axObjectCache.release();
&gt; 
&gt; No need to put the result of release into a local variable. This can just be:
&gt; 
&gt;     topDocument()-&gt;m_axObjectCache.release();

Done.

&gt; &gt; Source/WebCore/dom/Document.cpp:2223
&gt; &gt; +    Document* document = topDocument();
&gt; &gt; +    ASSERT(document == this || !m_axObjectCache);
&gt; &gt; +    if (document-&gt;m_axObjectCache)
&gt; &gt; +        return document-&gt;m_axObjectCache.get();
&gt; &gt; +    document-&gt;m_axObjectCache = adoptPtr(new AXObjectCache(this));
&gt; &gt; +    return document-&gt;m_axObjectCache.get();
&gt; 
&gt; I prefer to write such things as:
&gt; 
&gt;     if (!document-&gt;m_axObjectCache)
&gt;         document-&gt;m_axObjectCache = adoptPtr(new AXObjectCache(this));
&gt;     return document-&gt;m_axObjectCache.get();

Done.

&gt; But also, I suggest writing this instead:
&gt; 
&gt;     ASSERT(this = topDocument() || !m_axObjectCache);
&gt;     if (!m_axObjectCache)
&gt;         m_axObjectCache = adoptPtr(new AXObjectCache(this));
&gt;     return m_axObjectCache.get();

I&apos;m nit sure I understand.  If Document::axObjectCache() is called on a non-top document, won&apos;t this code create a new object cache for that document?

It&apos;s a bit strange that we have a m_axObjectCache pointer for every Document but we only use it for top documents.  It seems like it might be better to store that pointer on Page.

I wandered into this code because Document::axObjectCache is showing up on profiles for Dromeo&apos;s dom-modify benchmark (because it is called in Element::attributeChanged).  I thing was I would first modernize the code to use OwnPtr and then see about getting it off the profile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763899</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-11 15:29:42 -0800</bug_when>
    <thetext>s/nit/not/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763900</commentid>
    <comment_count>6</comment_count>
      <attachid>173520</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-11 15:31:43 -0800</bug_when>
    <thetext>Created attachment 173520
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763925</commentid>
    <comment_count>7</comment_count>
      <attachid>173520</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-11 16:30:19 -0800</bug_when>
    <thetext>Comment on attachment 173520
Patch for landing

Clearing flags on attachment: 173520

Committed r134178: &lt;http://trac.webkit.org/changeset/134178&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763926</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-11 16:30:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764557</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-12 10:40:31 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m nit sure I understand.  If Document::axObjectCache() is called on a non-top document, won&apos;t this code create a new object cache for that document?

Yes, I misunderstood the code.

&gt; It&apos;s a bit strange that we have a m_axObjectCache pointer for every Document but we only use it for top documents.  It seems like it might be better to store that pointer on Page.

Possibly. Page comes with its own problems because it can be 0 for during the end of a frame’s lifetime. But we did create Page originally to try to move top document and top frame data structures out of the Frame/Document family of classes.

&gt; I wandered into this code because Document::axObjectCache is showing up on profiles for Dromeo&apos;s dom-modify benchmark (because it is called in Element::attributeChanged).  I thing was I would first modernize the code to use OwnPtr and then see about getting it off the profile.

Sure does sound like a great plan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764558</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-12 10:42:51 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #4)
&gt; &gt; I&apos;m nit sure I understand.  If Document::axObjectCache() is called on a non-top document, won&apos;t this code create a new object cache for that document?
&gt; 
&gt; Yes, I misunderstood the code.

If I had understood better what was going on, I would have suggested naming the local variable topDocument:

    Document* topDocument = this-&gt;topDocument();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764597</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-12 11:18:46 -0800</bug_when>
    <thetext>&gt; If I had understood better what was going on, I would have suggested naming the local variable topDocument:

Good idea.  Will fix shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764663</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-12 12:25:23 -0800</bug_when>
    <thetext>Name change is in bug 101966.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173416</attachid>
            <date>2012-11-09 17:39:36 -0800</date>
            <delta_ts>2012-11-11 15:31:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101820-20121109173743.patch</filename>
            <type>text/plain</type>
            <size>5280</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQ5ZjM4Y2ZmOGJmMWM2
MTc3NzdmZGVjODczOTNkMjUzZDNkY2JlMC4uZTYxYWFhMzNmMjdmZjBmMTI0NDg0M2I5NzAzOGQz
MjUxNzU2MTI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTExLTA5ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgYXhPYmplY3RDYWNoZSBjb2Rl
IGlzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBuZWNlc3NhcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgyMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY29kZSBzaG91bGQgdXNlIE93blB0ciBy
YXRoZXIgdGhhbiBtYW51YWxseSBjYWxsaW5nIG5ldy9kZWxldGUuCisgICAgICAgIEFsc28sIGlu
c3RlYWQgb2YgdXNpbmcgYSAiZG91YmxlIGNoZWNrIiBwYXR0ZXJuLCB3ZSBjYW4ganVzdCBhY2Nl
c3MgdGhlCisgICAgICAgIHByaXZhdGUgZmllbGRzIG9uIHRoZSB0b3AgZG9jdW1lbnQgZGlyZWN0
bHkuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjbGVhckFYT2Jq
ZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF4T2JqZWN0Q2FjaGVFeGlz
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXhP
YmplY3RDYWNoZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChEb2N1bWVu
dCk6CisKIDIwMTItMTEtMDkgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29t
PgogCiAgICAgICAgIFtUZXhtYXBdW0NTUyBTaGFkZXJzXSBFbmFibGUgQ1NTIFNoYWRlcnMgaW4g
VGV4dHVyZU1hcHBlckdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAwYmE4YzhiOGNkZDRj
M2U2ZjdjZmE1MzRhMDY5NmRiNGRiMWM1ZmM4Li43YTJkODY2N2RhOWE5MjliMDlmMDdlMWY0NzNl
N2RjNmU0ZjZjODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTUyNiw4ICs1MjYsNiBA
QCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wg
aXNYSFRNTCwgYm9vbCBpc0hUTUwpCiAgICAgaWYgKChmcmFtZSAmJiBmcmFtZS0+b3duZXJFbGVt
ZW50KCkpIHx8ICF1cmwuaXNFbXB0eSgpKQogICAgICAgICBzZXRVUkwodXJsKTsKIAotICAgIG1f
YXhPYmplY3RDYWNoZSA9IDA7Ci0KICAgICBtX21hcmtlcnMgPSBhZG9wdFB0cihuZXcgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyKTsKIAogICAgIGlmIChtX2ZyYW1lKQpAQCAtMjIwMSw2OSArMjE5
OSwyOCBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKCkKIAogdm9pZCBE
b2N1bWVudDo6Y2xlYXJBWE9iamVjdENhY2hlKCkKIHsKLSAgICAvLyBjbGVhciBjYWNoZSBpbiB0
b3AgZG9jdW1lbnQKLSAgICBpZiAobV9heE9iamVjdENhY2hlKSB7Ci0gICAgICAgIC8vIENsZWFy
IHRoZSBjYWNoZSBtZW1iZXIgdmFyaWFibGUgYmVmb3JlIGNhbGxpbmcgZGVsZXRlIGJlY2F1c2Ug
YXR0ZW1wdHMKLSAgICAgICAgLy8gYXJlIG1hZGUgdG8gYWNjZXNzIGl0IGR1cmluZyBkZXN0cnVj
dGlvbi4KLSAgICAgICAgQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSA9IG1fYXhPYmplY3RD
YWNoZTsKLSAgICAgICAgbV9heE9iamVjdENhY2hlID0gMDsKLSAgICAgICAgZGVsZXRlIGF4T2Jq
ZWN0Q2FjaGU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gYXNrIHRoZSB0
b3AtbGV2ZWwgZG9jdW1lbnQgdG8gY2xlYXIgaXRzIGNhY2hlCi0gICAgRG9jdW1lbnQqIGRvYyA9
IHRvcERvY3VtZW50KCk7Ci0gICAgaWYgKGRvYyAhPSB0aGlzKQotICAgICAgICBkb2MtPmNsZWFy
QVhPYmplY3RDYWNoZSgpOworICAgIC8vIENsZWFyIHRoZSBjYWNoZSBtZW1iZXIgdmFyaWFibGUg
YmVmb3JlIGNhbGxpbmcgZGVsZXRlIGJlY2F1c2UgYXR0ZW1wdHMKKyAgICAvLyBhcmUgbWFkZSB0
byBhY2Nlc3MgaXQgZHVyaW5nIGRlc3RydWN0aW9uLgorICAgIE93blB0cjxBWE9iamVjdENhY2hl
PiBheE9iamVjdENhY2hlID0gdG9wRG9jdW1lbnQoKS0+bV9heE9iamVjdENhY2hlLnJlbGVhc2Uo
KTsKIH0KIAogYm9vbCBEb2N1bWVudDo6YXhPYmplY3RDYWNoZUV4aXN0cygpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fYXhPYmplY3RDYWNoZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAg
RG9jdW1lbnQqIGRvYyA9IHRvcERvY3VtZW50KCk7Ci0gICAgaWYgKGRvYyAhPSB0aGlzKQotICAg
ICAgICByZXR1cm4gZG9jLT5heE9iamVjdENhY2hlRXhpc3RzKCk7Ci0gICAgCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0b3BEb2N1bWVudCgpLT5tX2F4T2JqZWN0Q2FjaGU7CiB9Ci0g
ICAgCisKIEFYT2JqZWN0Q2FjaGUqIERvY3VtZW50OjpheE9iamVjdENhY2hlKCkgY29uc3QKIHsK
ICAgICAvLyBUaGUgb25seSBkb2N1bWVudCB0aGF0IGFjdHVhbGx5IGhhcyBhIEFYT2JqZWN0Q2Fj
aGUgaXMgdGhlIHRvcC1sZXZlbAogICAgIC8vIGRvY3VtZW50LiAgVGhpcyBpcyBiZWNhdXNlIHdl
IG5lZWQgdG8gYmUgYWJsZSB0byBnZXQgZnJvbSBhbnkgV2ViQ29yZUFYT2JqZWN0CiAgICAgLy8g
dG8gYW55IG90aGVyIFdlYkNvcmVBWE9iamVjdCBvbiB0aGUgc2FtZSBwYWdlLiAgVXNpbmcgYSBz
aW5nbGUgY2FjaGUgYWxsb3dzCiAgICAgLy8gbG9va3VwcyBhY3Jvc3MgbmVzdGVkIHdlYmFyZWFz
IChpLmUuIG11bHRpcGxlIGRvY3VtZW50cykuCi0gICAgCi0gICAgaWYgKG1fYXhPYmplY3RDYWNo
ZSkgewotICAgICAgICAvLyByZXR1cm4gYWxyZWFkeSBrbm93biB0b3AtbGV2ZWwgY2FjaGUKLSAg
ICAgICAgaWYgKCFvd25lckVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2F4T2JqZWN0
Q2FjaGU7Ci0gICAgICAgIAotICAgICAgICAvLyBJbiBzb21lIHBhZ2VzIHdpdGggZnJhbWVzLCB0
aGUgY2FjaGUgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIHN1Yi13ZWJhcmVhIGlzCi0gICAgICAgIC8v
IGluc2VydGVkIGludG8gdGhlIHRyZWUuICBIZXJlLCB3ZSBjYXRjaCB0aGF0IGNhc2UgYW5kIGp1
c3QgdG9zcyB0aGUgb2xkCi0gICAgICAgIC8vIGNhY2hlIGFuZCBzdGFydCBvdmVyLgotICAgICAg
ICAvLyBOT1RFOiBUaGlzIHJlY292ZXJ5IG1heSBubyBsb25nZXIgYmUgbmVlZGVkLiBJIGhhdmUg
YmVlbiB1bmFibGUgdG8gdHJpZ2dlcgotICAgICAgICAvLyBpdCBhZ2Fpbi4gU2VlIHJkYXI6Ly81
Nzk0NDU0Ci0gICAgICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBmaXhlZCB3aGVuIGluc2VydGlu
ZyB0aGUgc3ViZnJhbWUgaW5zdGVhZCBvZiBub3c/Ci0gICAgICAgIC8vIEZJWE1FOiBJZiB0aGlz
IGZ1bmN0aW9uIHdhcyBjYWxsZWQgdG8gZ2V0IHRoZSBjYWNoZSBpbiBvcmRlciB0byByZW1vdmUK
LSAgICAgICAgLy8gYW4gQVhPYmplY3QsIHdlIGFyZSBub3cgZGVsZXRpbmcgdGhlIGNhY2hlIGFz
IGEgd2hvbGUgYW5kIHJldHVybmluZyBhCi0gICAgICAgIC8vIG5ldyBlbXB0eSBjYWNoZSB0aGF0
IGRvZXMgbm90IGNvbnRhaW4gdGhlIEFYT2JqZWN0ISBUaGF0IHNob3VsZCBhY3R1YWxseQotICAg
ICAgICAvLyBiZSBPSy4gSSBhbSBjb25jZXJuZWQgYWJvdXQgb3RoZXIgY2FzZXMgbGlrZSB0aGlz
IHdoZXJlIGFjY2Vzc2luZyB0aGUKLSAgICAgICAgLy8gY2FjaGUgYmxvd3MgYXdheSB0aGUgQVhP
YmplY3QgYmVpbmcgb3BlcmF0ZWQgb24uCi0gICAgICAgIGRlbGV0ZSBtX2F4T2JqZWN0Q2FjaGU7
Ci0gICAgICAgIG1fYXhPYmplY3RDYWNoZSA9IDA7Ci0gICAgfQotCi0gICAgLy8gYXNrIHRoZSB0
b3AtbGV2ZWwgZG9jdW1lbnQgZm9yIGl0cyBjYWNoZQotICAgIERvY3VtZW50KiBkb2MgPSB0b3BE
b2N1bWVudCgpOwotICAgIGlmIChkb2MgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIGRvYy0+YXhP
YmplY3RDYWNoZSgpOwotICAgIAotICAgIC8vIHRoaXMgaXMgdGhlIHRvcC1sZXZlbCBkb2N1bWVu
dCwgc28gaW5zdGFsbCBhIG5ldyBjYWNoZQotICAgIG1fYXhPYmplY3RDYWNoZSA9IG5ldyBBWE9i
amVjdENhY2hlKHRoaXMpOwotICAgIHJldHVybiBtX2F4T2JqZWN0Q2FjaGU7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gdG9wRG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQgPT0gdGhp
cyB8fCAhbV9heE9iamVjdENhY2hlKTsKKyAgICBpZiAoZG9jdW1lbnQtPm1fYXhPYmplY3RDYWNo
ZSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tX2F4T2JqZWN0Q2FjaGUuZ2V0KCk7CisgICAg
ZG9jdW1lbnQtPm1fYXhPYmplY3RDYWNoZSA9IGFkb3B0UHRyKG5ldyBBWE9iamVjdENhY2hlKHRo
aXMpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPm1fYXhPYmplY3RDYWNoZS5nZXQoKTsKIH0KIAog
dm9pZCBEb2N1bWVudDo6c2V0VmlzdWFsbHlPcmRlcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggMmU0ZTA3M2JmNjQ2YzBkZjBjYTdlZWIyMTdhMGM4Y2RmNGZmNWExNy4uYzQ2ZjA0MjFiYmVh
MDYwN2I2NDhiNTc3NzdhZjM4NThkNGE4YzgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEz
NjIsNyArMTM2Miw3IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8UmVuZGVyQXJlbmE+IG1fcmVu
ZGVyQXJlbmE7CiAKLSAgICBtdXRhYmxlIEFYT2JqZWN0Q2FjaGUqIG1fYXhPYmplY3RDYWNoZTsK
KyAgICBPd25QdHI8QVhPYmplY3RDYWNoZT4gbV9heE9iamVjdENhY2hlOwogICAgIE93blB0cjxE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI+IG1fbWFya2VyczsKICAgICAKICAgICBUaW1lcjxEb2N1
bWVudD4gbV91cGRhdGVGb2N1c0FwcGVhcmFuY2VUaW1lcjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173520</attachid>
            <date>2012-11-11 15:31:43 -0800</date>
            <delta_ts>2012-11-11 16:30:19 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-101820-20121111152946.patch</filename>
            <type>text/plain</type>
            <size>5031</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEyLTExLTExICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgYXhPYmplY3RDYWNoZSBjb2RlIGlz
IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBuZWNlc3NhcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgyMAorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIFRoaXMgY29kZSBzaG91bGQgdXNlIE93blB0ciByYXRoZXIg
dGhhbiBtYW51YWxseSBjYWxsaW5nIG5ldy9kZWxldGUuCisgICAgICAgIEFsc28sIGluc3RlYWQg
b2YgdXNpbmcgYSAiZG91YmxlIGNoZWNrIiBwYXR0ZXJuLCB3ZSBjYW4ganVzdCBhY2Nlc3MgdGhl
CisgICAgICAgIHByaXZhdGUgZmllbGRzIG9uIHRoZSB0b3AgZG9jdW1lbnQgZGlyZWN0bHkuCisK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjbGVhckFYT2JqZWN0Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF4T2JqZWN0Q2FjaGVFeGlzdHMpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXhPYmplY3RD
YWNoZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChEb2N1bWVudCk6CisK
IDIwMTItMTEtMTAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgU2F2ZSBvbmUgY2FsbCB0byBjb250YWluZXJGb3JSZXBhaW50KCkgd2hlbiB1cGRhdGlu
ZyBsYXllciBwb3NpdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24g
MTM0MTc0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTI2LDggKzUyNiw2IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNv
bnN0IEsKICAgICBpZiAoKGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1lbnQoKSkgfHwgIXVybC5p
c0VtcHR5KCkpCiAgICAgICAgIHNldFVSTCh1cmwpOwogCi0gICAgbV9heE9iamVjdENhY2hlID0g
MDsKLQogICAgIG1fbWFya2VycyA9IGFkb3B0UHRyKG5ldyBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIpOwogCiAgICAgaWYgKG1fZnJhbWUpCkBAIC0yMjAxLDY5ICsyMTk5LDI3IEBAIHZvaWQgRG9j
dW1lbnQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKQogCiB2b2lkIERvY3VtZW50OjpjbGVhckFY
T2JqZWN0Q2FjaGUoKQogewotICAgIC8vIGNsZWFyIGNhY2hlIGluIHRvcCBkb2N1bWVudAotICAg
IGlmIChtX2F4T2JqZWN0Q2FjaGUpIHsKLSAgICAgICAgLy8gQ2xlYXIgdGhlIGNhY2hlIG1lbWJl
ciB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBkZWxldGUgYmVjYXVzZSBhdHRlbXB0cwotICAgICAg
ICAvLyBhcmUgbWFkZSB0byBhY2Nlc3MgaXQgZHVyaW5nIGRlc3RydWN0aW9uLgotICAgICAgICBB
WE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlID0gbV9heE9iamVjdENhY2hlOwotICAgICAgICBt
X2F4T2JqZWN0Q2FjaGUgPSAwOwotICAgICAgICBkZWxldGUgYXhPYmplY3RDYWNoZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBhc2sgdGhlIHRvcC1sZXZlbCBkb2N1bWVu
dCB0byBjbGVhciBpdHMgY2FjaGUKLSAgICBEb2N1bWVudCogZG9jID0gdG9wRG9jdW1lbnQoKTsK
LSAgICBpZiAoZG9jICE9IHRoaXMpCi0gICAgICAgIGRvYy0+Y2xlYXJBWE9iamVjdENhY2hlKCk7
CisgICAgLy8gQ2xlYXIgdGhlIGNhY2hlIG1lbWJlciB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBk
ZWxldGUgYmVjYXVzZSBhdHRlbXB0cworICAgIC8vIGFyZSBtYWRlIHRvIGFjY2VzcyBpdCBkdXJp
bmcgZGVzdHJ1Y3Rpb24uCisgICAgdG9wRG9jdW1lbnQoKS0+bV9heE9iamVjdENhY2hlLnJlbGVh
c2UoKTsKIH0KIAogYm9vbCBEb2N1bWVudDo6YXhPYmplY3RDYWNoZUV4aXN0cygpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fYXhPYmplY3RDYWNoZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgRG9jdW1lbnQqIGRvYyA9IHRvcERvY3VtZW50KCk7Ci0gICAgaWYgKGRvYyAhPSB0aGlzKQot
ICAgICAgICByZXR1cm4gZG9jLT5heE9iamVjdENhY2hlRXhpc3RzKCk7Ci0gICAgCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0b3BEb2N1bWVudCgpLT5tX2F4T2JqZWN0Q2FjaGU7CiB9
Ci0gICAgCisKIEFYT2JqZWN0Q2FjaGUqIERvY3VtZW50OjpheE9iamVjdENhY2hlKCkgY29uc3QK
IHsKICAgICAvLyBUaGUgb25seSBkb2N1bWVudCB0aGF0IGFjdHVhbGx5IGhhcyBhIEFYT2JqZWN0
Q2FjaGUgaXMgdGhlIHRvcC1sZXZlbAogICAgIC8vIGRvY3VtZW50LiAgVGhpcyBpcyBiZWNhdXNl
IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBnZXQgZnJvbSBhbnkgV2ViQ29yZUFYT2JqZWN0CiAgICAg
Ly8gdG8gYW55IG90aGVyIFdlYkNvcmVBWE9iamVjdCBvbiB0aGUgc2FtZSBwYWdlLiAgVXNpbmcg
YSBzaW5nbGUgY2FjaGUgYWxsb3dzCiAgICAgLy8gbG9va3VwcyBhY3Jvc3MgbmVzdGVkIHdlYmFy
ZWFzIChpLmUuIG11bHRpcGxlIGRvY3VtZW50cykuCi0gICAgCi0gICAgaWYgKG1fYXhPYmplY3RD
YWNoZSkgewotICAgICAgICAvLyByZXR1cm4gYWxyZWFkeSBrbm93biB0b3AtbGV2ZWwgY2FjaGUK
LSAgICAgICAgaWYgKCFvd25lckVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2F4T2Jq
ZWN0Q2FjaGU7Ci0gICAgICAgIAotICAgICAgICAvLyBJbiBzb21lIHBhZ2VzIHdpdGggZnJhbWVz
LCB0aGUgY2FjaGUgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIHN1Yi13ZWJhcmVhIGlzCi0gICAgICAg
IC8vIGluc2VydGVkIGludG8gdGhlIHRyZWUuICBIZXJlLCB3ZSBjYXRjaCB0aGF0IGNhc2UgYW5k
IGp1c3QgdG9zcyB0aGUgb2xkCi0gICAgICAgIC8vIGNhY2hlIGFuZCBzdGFydCBvdmVyLgotICAg
ICAgICAvLyBOT1RFOiBUaGlzIHJlY292ZXJ5IG1heSBubyBsb25nZXIgYmUgbmVlZGVkLiBJIGhh
dmUgYmVlbiB1bmFibGUgdG8gdHJpZ2dlcgotICAgICAgICAvLyBpdCBhZ2Fpbi4gU2VlIHJkYXI6
Ly81Nzk0NDU0Ci0gICAgICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBmaXhlZCB3aGVuIGluc2Vy
dGluZyB0aGUgc3ViZnJhbWUgaW5zdGVhZCBvZiBub3c/Ci0gICAgICAgIC8vIEZJWE1FOiBJZiB0
aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgdG8gZ2V0IHRoZSBjYWNoZSBpbiBvcmRlciB0byByZW1v
dmUKLSAgICAgICAgLy8gYW4gQVhPYmplY3QsIHdlIGFyZSBub3cgZGVsZXRpbmcgdGhlIGNhY2hl
IGFzIGEgd2hvbGUgYW5kIHJldHVybmluZyBhCi0gICAgICAgIC8vIG5ldyBlbXB0eSBjYWNoZSB0
aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIEFYT2JqZWN0ISBUaGF0IHNob3VsZCBhY3R1YWxseQot
ICAgICAgICAvLyBiZSBPSy4gSSBhbSBjb25jZXJuZWQgYWJvdXQgb3RoZXIgY2FzZXMgbGlrZSB0
aGlzIHdoZXJlIGFjY2Vzc2luZyB0aGUKLSAgICAgICAgLy8gY2FjaGUgYmxvd3MgYXdheSB0aGUg
QVhPYmplY3QgYmVpbmcgb3BlcmF0ZWQgb24uCi0gICAgICAgIGRlbGV0ZSBtX2F4T2JqZWN0Q2Fj
aGU7Ci0gICAgICAgIG1fYXhPYmplY3RDYWNoZSA9IDA7Ci0gICAgfQotCi0gICAgLy8gYXNrIHRo
ZSB0b3AtbGV2ZWwgZG9jdW1lbnQgZm9yIGl0cyBjYWNoZQotICAgIERvY3VtZW50KiBkb2MgPSB0
b3BEb2N1bWVudCgpOwotICAgIGlmIChkb2MgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIGRvYy0+
YXhPYmplY3RDYWNoZSgpOwotICAgIAotICAgIC8vIHRoaXMgaXMgdGhlIHRvcC1sZXZlbCBkb2N1
bWVudCwgc28gaW5zdGFsbCBhIG5ldyBjYWNoZQotICAgIG1fYXhPYmplY3RDYWNoZSA9IG5ldyBB
WE9iamVjdENhY2hlKHRoaXMpOwotICAgIHJldHVybiBtX2F4T2JqZWN0Q2FjaGU7CisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gdG9wRG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQgPT0g
dGhpcyB8fCAhbV9heE9iamVjdENhY2hlKTsKKyAgICBpZiAoIWRvY3VtZW50LT5tX2F4T2JqZWN0
Q2FjaGUpCisgICAgICAgIGRvY3VtZW50LT5tX2F4T2JqZWN0Q2FjaGUgPSBhZG9wdFB0cihuZXcg
QVhPYmplY3RDYWNoZSh0aGlzKSk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5tX2F4T2JqZWN0Q2Fj
aGUuZ2V0KCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFZpc3VhbGx5T3JkZXJlZCgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTM0MTc0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNjIsNyArMTM2Miw3IEBAIHByaXZh
dGU6CiAKICAgICBPd25QdHI8UmVuZGVyQXJlbmE+IG1fcmVuZGVyQXJlbmE7CiAKLSAgICBtdXRh
YmxlIEFYT2JqZWN0Q2FjaGUqIG1fYXhPYmplY3RDYWNoZTsKKyAgICBPd25QdHI8QVhPYmplY3RD
YWNoZT4gbV9heE9iamVjdENhY2hlOwogICAgIE93blB0cjxEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI+IG1fbWFya2VyczsKICAgICAKICAgICBUaW1lcjxEb2N1bWVudD4gbV91cGRhdGVGb2N1c0Fw
cGVhcmFuY2VUaW1lcjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>