<?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>47506</bug_id>
          
          <creation_ts>2010-10-11 14:55:42 -0700</creation_ts>
          <short_desc>Optimize String.prototype.replace on v8-regexp</short_desc>
          <delta_ts>2010-10-12 11:37:47 -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="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>292678</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-10-11 14:55:42 -0700</bug_when>
    <thetext>About 10% of v8-regexp time is spent in stringProtoFuncReplace() and supporting routines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292714</commentid>
    <comment_count>1</comment_count>
      <attachid>70481</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-10-11 15:33:15 -0700</bug_when>
    <thetext>Created attachment 70481
Patch to reduce overhead.

This patch streamlines some of the processing after the regular expression has been applied to the string.  Replaced a null string (len ==0) with default constructors.  Other misc. string aiti issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292715</commentid>
    <comment_count>2</comment_count>
      <attachid>70481</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-11 15:33:33 -0700</bug_when>
    <thetext>Comment on attachment 70481
Patch to reduce overhead.

Rejecting patch 70481 from review queue.

msaboff@apple.com does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py.

- If you do not have reviewer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have reviewer rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your reviewer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292986</commentid>
    <comment_count>3</comment_count>
      <attachid>70481</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-12 10:16:34 -0700</bug_when>
    <thetext>Comment on attachment 70481
Patch to reduce overhead.

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

Basic logic looks fine, but i don&apos;t really like the assignment to length inside those if conditions, so r-

&gt; JavaScriptCore/runtime/StringPrototype.cpp:278
&gt; +        if ((i &lt; rangeCount) &amp;&amp; (length = substringRanges[i].length)) {

This seems a little icky, i&apos;d prefer it if we didn&apos;t assign to length inside this condition.

You could try just:
if (i &lt; rangeCount) {
    int length = substringRanges[i].length;
    StringImpl::copyChars(buffer + bufferPos, source.characters() + substringRanges[i].position, length);
    bufferPos += length;
}

This allows the outer int length to be removed (so avoiding confusion over what length is being referred to), and i would hope a 0 length string copy would have negligible impact.

&gt; JavaScriptCore/runtime/StringPrototype.cpp:282
&gt; +        if ((i &lt; separatorCount) &amp;&amp; (length = separators[i].length())) {

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292991</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-12 10:35:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; i would hope a 0 length string copy would have negligible impact.

We could do more than hope; we could measure. The question is whether the extra branch to check for zero length pays for itself. This depends on: 1) how costly the copyChars with length 0 is, 2) how costly the branch is, and 3) how common a length of zero is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293004</commentid>
    <comment_count>5</comment_count>
      <attachid>70545</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-10-12 11:17:21 -0700</bug_when>
    <thetext>Created attachment 70545
Updated patch

Changed the embedded assignments in the if statements to be independent and include declarations.

Concerning comment #4, the impact of the copying of zero length strings is measurable although I didn&apos;t break it out separately.  The StringImpl::copyChars() actually result in a function call (not inlined).  The zero length check before the call eliminates not only the call but a few other instructions as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293010</commentid>
    <comment_count>6</comment_count>
      <attachid>70545</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-12 11:34:29 -0700</bug_when>
    <thetext>Comment on attachment 70545
Updated patch

Clearing flags on attachment: 70545

Committed r69590: &lt;http://trac.webkit.org/changeset/69590&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293011</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-12 11:34:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293012</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-12 11:37:47 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; The StringImpl::copyChars() actually results in a function call (not inlined).

As a small related cleanup and performance task we may want to look into renaming copyChars, making the renamed copyCharacters an inline function, and also making it be a free function rather than a StringImpl static member function.

I suspect this would be better for almost every call site, it might allow us to remove this zero length check as well, and perhaps it would even make some benchmarks run faster.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70481</attachid>
            <date>2010-10-11 15:33:15 -0700</date>
            <delta_ts>2010-10-12 11:17:21 -0700</delta_ts>
            <desc>Patch to reduce overhead.</desc>
            <filename>replace_oh-4.patch</filename>
            <type>text/plain</type>
            <size>6631</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5NTI4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMTEgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2xlYW5lZCB1cCB0aGUgcHJvY2Vzc2luZyBvZiByZXBsYWNl
bWVudHMgYWZ0ZXIgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgIHByb2Nlc3NpbmcsIGVzcGVj
aWFsbHkgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgd2Fzbid0IGEgbWF0Y2guCisgICAgICAgIENoYW5n
ZWQgdG8gdXNlIGVtcHR5IHN0cmluZ3MgaW5zdGVhZCBvZiBjb21wdXRpbmcgYSB6ZXJvIGxlZ250
aCBzdWIKKyAgICAgICAgc3RyaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDc1MDYKKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6anNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKwogMjAxMC0xMC0xMSAgQnJp
YW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4
IGZvciBXaW5kb3dzLiBBZGQgYSBuZWNlc3NhcnkgZXhwb3J0IGZyb20gcjY5NTE2LgpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNjk0
MTgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3NCwxMyArMjc0LDE0IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNTcGxpY2VTdWIKICAgICBpbnQgbWF4Q291bnQgPSBtYXgocmFuZ2VDb3VudCwgc2VwYXJh
dG9yQ291bnQpOwogICAgIGludCBidWZmZXJQb3MgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbWF4Q291bnQ7IGkrKykgewotICAgICAgICBpZiAoaSA8IHJhbmdlQ291bnQpIHsKLSAgICAg
ICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNvdXJjZS5j
aGFyYWN0ZXJzKCkgKyBzdWJzdHJpbmdSYW5nZXNbaV0ucG9zaXRpb24sIHN1YnN0cmluZ1Jhbmdl
c1tpXS5sZW5ndGgpOwotICAgICAgICAgICAgYnVmZmVyUG9zICs9IHN1YnN0cmluZ1Jhbmdlc1tp
XS5sZW5ndGg7CisgICAgICAgIGludCBsZW5ndGg7CisgICAgICAgIGlmICgoaSA8IHJhbmdlQ291
bnQpICYmIChsZW5ndGggPSBzdWJzdHJpbmdSYW5nZXNbaV0ubGVuZ3RoKSkgeworICAgICAgICAg
ICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1ZmZlciArIGJ1ZmZlclBvcywgc291cmNlLmNoYXJh
Y3RlcnMoKSArIHN1YnN0cmluZ1Jhbmdlc1tpXS5wb3NpdGlvbiwgbGVuZ3RoKTsKKyAgICAgICAg
ICAgIGJ1ZmZlclBvcyArPSBsZW5ndGg7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGkgPCBzZXBh
cmF0b3JDb3VudCkgewotICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1ZmZlciAr
IGJ1ZmZlclBvcywgc2VwYXJhdG9yc1tpXS5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvcnNbaV0ubGVu
Z3RoKCkpOwotICAgICAgICAgICAgYnVmZmVyUG9zICs9IHNlcGFyYXRvcnNbaV0ubGVuZ3RoKCk7
CisgICAgICAgIGlmICgoaSA8IHNlcGFyYXRvckNvdW50KSAmJiAobGVuZ3RoID0gc2VwYXJhdG9y
c1tpXS5sZW5ndGgoKSkpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZm
ZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNbaV0uY2hhcmFjdGVycygpLCBsZW5ndGgpOworICAg
ICAgICAgICAgYnVmZmVyUG9zICs9IGxlbmd0aDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzAy
LDYgKzMwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAog
ICAgIGlmIChwYXR0ZXJuLmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OmluZm8pKSB7CiAgICAgICAg
IGNvbnN0IFVTdHJpbmcmIHNvdXJjZSA9IHNvdXJjZVZhbC0+dmFsdWUoZXhlYyk7CisgICAgICAg
IHVuc2lnbmVkIHNvdXJjZUxlbiA9IHNvdXJjZS5sZW5ndGgoKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgICAgICBSZWdFeHAqIHJlZyA9IGFzUmVnRXhwT2JqZWN0KHBhdHRlcm4pLT5y
ZWdFeHAoKTsKQEAgLTMzMCw3ICszMzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgICAgICAgICAgICAgcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1N
YXRjaChyZWcsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgbWF0Y2hJbmRleCwgbWF0Y2hMZW4sICZv
dmVjdG9yKTsKICAgICAgICAgICAgICAgICBpZiAobWF0Y2hJbmRleCA8IDApCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgc291
cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0
SW5kZXgpKTsKIAogICAgICAgICAgICAgICAgIGludCBjb21wbGV0ZU1hdGNoU3RhcnQgPSBvdmVj
dG9yWzBdOwpAQCAtMzQ3LDcgKzM0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KIAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSsr
LCBqc051bWJlcihleGVjLCBjb21wbGV0ZU1hdGNoU3RhcnQpKTsKICAgICAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KGkrKywgc291cmNlVmFsKTsKLSAgICAgICAgICAgICAgICAK
KwogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhleGVjLT5nbG9iYWxUaGlzVmFs
dWUoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwo
KTsKICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHJlc3VsdC5pc1N0cmluZygpKSkKQEAgLTM2
MywxMCArMzY1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgZW1wdHkgbWF0Y2gKICAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hMZW4gPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBzdGFydFBv
c2l0aW9uKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gc291cmNl
Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IHNvdXJj
ZUxlbikKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICBpbnQgbWF0Y2hJbmRleDsKQEAg
LTM3NiwxNiArMzc4LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICAgICAgICAgICAgICBpZiAobWF0Y2hJbmRleCA8IDApCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgc291cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdS
YW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKLQogICAgICAgICAgICAg
ICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
c291cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBs
YXN0SW5kZXgpKTsKKwogICAgICAgICAgICAgICAgICAgICBpbnQgY29tcGxldGVNYXRjaFN0YXJ0
ID0gb3ZlY3RvclswXTsKICAgICAgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKIAogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
LT5udW1TdWJwYXR0ZXJucygpICsgMTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWF0Y2hTdGFydCA9IG92ZWN0b3JbaSAqIDJdOwogICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG1hdGNoTGVuID0gb3ZlY3RvcltpICogMiArIDFdIC0gbWF0Y2hTdGFydDsKLQorIAogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU3RhcnQgPCAwKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQpAQCAtMzk4LDggKzQwMCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBl
bmQoY2FsbChleGVjLCByZXBsYWNlbWVudCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBleGVjLT5nbG9i
YWxUaGlzVmFsdWUoKSwgYXJncykudG9TdHJpbmcoZXhlYykpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1l
bnRzLmFwcGVuZChzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMocmVwbGFjZW1lbnRTdHJpbmcsIHNv
dXJjZSwgb3ZlY3RvciwgcmVnKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW50IHJlcGxMZW4gPSByZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA8IG1hdGNoSW5kZXggfHwgcmVwbExlbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5n
ZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKKyAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXBsTGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50cy5hcHBlbmQoc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VtZW50U3RyaW5n
LCBzb3VyY2UsIG92ZWN0b3IsIHJlZykpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoVVN0cmluZygp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaExlbjsKICAgICAgICAgICAgICAg
ICBzdGFydFBvc2l0aW9uID0gbGFzdEluZGV4OwpAQCAtNDA3LDcgKzQxOCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgICAgICAgICAvLyBzcGVj
aWFsIGNhc2Ugb2YgZW1wdHkgbWF0Y2gKICAgICAgICAgICAgICAgICBpZiAobWF0Y2hMZW4gPT0g
MCkgewogICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uKys7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gc291cmNlLmxlbmd0aCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IHNvdXJjZUxlbikKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gd2hpbGUgKGds
b2JhbCk7CkBAIC00MTYsOCArNDI3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICBpZiAoIWxhc3RJbmRleCAmJiByZXBsYWNlbWVudHMuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzb3VyY2VWYWwpOwogCi0g
ICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdEluZGV4KSA8IHNvdXJjZS5sZW5n
dGgoKSkKLSAgICAgICAgICAgIHNvdXJjZVJhbmdlcy5hcHBlbmQoU3RyaW5nUmFuZ2UobGFzdElu
ZGV4LCBzb3VyY2UubGVuZ3RoKCkgLSBsYXN0SW5kZXgpKTsKKyAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsYXN0SW5kZXgpIDwgc291cmNlTGVuKQorICAgICAgICAgICAgc291cmNl
UmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIHNvdXJjZUxlbiAtIGxhc3RJbmRl
eCkpOwogCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTcGxpY2VTdWJzdHJpbmdz
V2l0aFNlcGFyYXRvcnMoZXhlYywgc291cmNlVmFsLCBzb3VyY2UsIHNvdXJjZVJhbmdlcy5kYXRh
KCksIHNvdXJjZVJhbmdlcy5zaXplKCksIHJlcGxhY2VtZW50cy5kYXRhKCksIHJlcGxhY2VtZW50
cy5zaXplKCkpKTsKICAgICB9Cg==
</data>
<flag name="review"
          id="60337"
          type_id="1"
          status="-"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="60338"
          type_id="3"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70545</attachid>
            <date>2010-10-12 11:17:21 -0700</date>
            <delta_ts>2010-10-12 11:34:29 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>replace_oh-5.patch</filename>
            <type>text/plain</type>
            <size>6571</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5NTI4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMTEgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2xlYW5lZCB1cCB0aGUgcHJvY2Vzc2luZyBvZiByZXBsYWNl
bWVudHMgYWZ0ZXIgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgIHByb2Nlc3NpbmcsIGVzcGVj
aWFsbHkgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgd2Fzbid0IGEgbWF0Y2guCisgICAgICAgIENoYW5n
ZWQgdG8gdXNlIGVtcHR5IHN0cmluZ3MgaW5zdGVhZCBvZiBjb21wdXRpbmcgYSB6ZXJvIGxlbmd0
aCBzdWIKKyAgICAgICAgc3RyaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDc1MDYKKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6anNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKwogMjAxMC0xMC0xMSAgQnJp
YW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4
IGZvciBXaW5kb3dzLiBBZGQgYSBuZWNlc3NhcnkgZXhwb3J0IGZyb20gcjY5NTE2LgpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNjk0
MTgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3NSwxMiArMjc1LDE2IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNTcGxpY2VTdWIKICAgICBpbnQgYnVmZmVyUG9zID0gMDsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1heENvdW50OyBpKyspIHsKICAgICAgICAgaWYgKGkgPCByYW5nZUNvdW50KSB7Ci0g
ICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzb3Vy
Y2UuY2hhcmFjdGVycygpICsgc3Vic3RyaW5nUmFuZ2VzW2ldLnBvc2l0aW9uLCBzdWJzdHJpbmdS
YW5nZXNbaV0ubGVuZ3RoKTsKLSAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBzdWJzdHJpbmdSYW5n
ZXNbaV0ubGVuZ3RoOworICAgICAgICAgICAgaWYgKGludCBzcmNMZW4gPSBzdWJzdHJpbmdSYW5n
ZXNbaV0ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1
ZmZlciArIGJ1ZmZlclBvcywgc291cmNlLmNoYXJhY3RlcnMoKSArIHN1YnN0cmluZ1Jhbmdlc1tp
XS5wb3NpdGlvbiwgc3JjTGVuKTsKKyAgICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gc3JjTGVu
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChpIDwgc2VwYXJhdG9yQ291
bnQpIHsKLSAgICAgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQ
b3MsIHNlcGFyYXRvcnNbaV0uY2hhcmFjdGVycygpLCBzZXBhcmF0b3JzW2ldLmxlbmd0aCgpKTsK
LSAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBzZXBhcmF0b3JzW2ldLmxlbmd0aCgpOworICAgICAg
ICAgICAgaWYgKGludCBzZXBMZW4gPSBzZXBhcmF0b3JzW2ldLmxlbmd0aCgpKSB7CisgICAgICAg
ICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1ZmZlciArIGJ1ZmZlclBvcywgc2VwYXJh
dG9yc1tpXS5jaGFyYWN0ZXJzKCksIHNlcExlbik7CisgICAgICAgICAgICAgICAgYnVmZmVyUG9z
ICs9IHNlcExlbjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMzAyLDYg
KzMwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogICAg
IGlmIChwYXR0ZXJuLmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OmluZm8pKSB7CiAgICAgICAgIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZSA9IHNvdXJjZVZhbC0+dmFsdWUoZXhlYyk7CisgICAgICAgIHVu
c2lnbmVkIHNvdXJjZUxlbiA9IHNvdXJjZS5sZW5ndGgoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgICAgICBSZWdFeHAqIHJlZyA9IGFzUmVnRXhwT2JqZWN0KHBhdHRlcm4pLT5yZWdF
eHAoKTsKQEAgLTMzMCw3ICszMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgICAgICAgICAgICAgcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRj
aChyZWcsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgbWF0Y2hJbmRleCwgbWF0Y2hMZW4sICZvdmVj
dG9yKTsKICAgICAgICAgICAgICAgICBpZiAobWF0Y2hJbmRleCA8IDApCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgc291cmNl
UmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5k
ZXgpKTsKIAogICAgICAgICAgICAgICAgIGludCBjb21wbGV0ZU1hdGNoU3RhcnQgPSBvdmVjdG9y
WzBdOwpAQCAtMzQ3LDcgKzM1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KIAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSsrLCBq
c051bWJlcihleGVjLCBjb21wbGV0ZU1hdGNoU3RhcnQpKTsKICAgICAgICAgICAgICAgICBjYWNo
ZWRDYWxsLnNldEFyZ3VtZW50KGkrKywgc291cmNlVmFsKTsKLSAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhleGVjLT5nbG9iYWxUaGlzVmFsdWUo
KSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsK
ICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHJlc3VsdC5pc1N0cmluZygpKSkKQEAgLTM2Mywx
MCArMzY4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgZW1wdHkgbWF0Y2gKICAgICAgICAgICAg
ICAgICBpZiAobWF0Y2hMZW4gPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0
aW9uKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gc291cmNlLmxl
bmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IHNvdXJjZUxl
bikKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICBpbnQgbWF0Y2hJbmRleDsKQEAgLTM3
NiwxNiArMzgxLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICAgICAgICAgICAgICBpZiAobWF0Y2hJbmRleCA8IDApCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgc291cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5n
ZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKLQogICAgICAgICAgICAgICAg
IGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291
cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0
SW5kZXgpKTsKKwogICAgICAgICAgICAgICAgICAgICBpbnQgY29tcGxldGVNYXRjaFN0YXJ0ID0g
b3ZlY3RvclswXTsKICAgICAgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
czsKIAogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnLT5u
dW1TdWJwYXR0ZXJucygpICsgMTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bWF0Y2hTdGFydCA9IG92ZWN0b3JbaSAqIDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1hdGNoTGVuID0gb3ZlY3RvcltpICogMiArIDFdIC0gbWF0Y2hTdGFydDsKLQorIAogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU3RhcnQgPCAwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3MuYXBwZW5kKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQpAQCAtMzk4LDggKzQwMywxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQo
Y2FsbChleGVjLCByZXBsYWNlbWVudCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBleGVjLT5nbG9iYWxU
aGlzVmFsdWUoKSwgYXJncykudG9TdHJpbmcoZXhlYykpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRz
LmFwcGVuZChzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMocmVwbGFjZW1lbnRTdHJpbmcsIHNvdXJj
ZSwgb3ZlY3RvciwgcmVnKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW50IHJlcGxMZW4gPSByZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA8IG1hdGNoSW5kZXggfHwgcmVwbExlbikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShs
YXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKKyAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXBsTGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vt
ZW50cy5hcHBlbmQoc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VtZW50U3RyaW5nLCBz
b3VyY2UsIG92ZWN0b3IsIHJlZykpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoVVN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaExlbjsKICAgICAgICAgICAgICAgICBz
dGFydFBvc2l0aW9uID0gbGFzdEluZGV4OwpAQCAtNDA3LDcgKzQyMSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgICAgICAgICAvLyBzcGVjaWFs
IGNhc2Ugb2YgZW1wdHkgbWF0Y2gKICAgICAgICAgICAgICAgICBpZiAobWF0Y2hMZW4gPT0gMCkg
ewogICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uKys7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFydFBvc2l0aW9uID4gc291cmNlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IHNvdXJjZUxlbikKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gd2hpbGUgKGdsb2Jh
bCk7CkBAIC00MTYsOCArNDMwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgICAgICBpZiAoIWxhc3RJbmRleCAmJiByZXBsYWNlbWVudHMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzb3VyY2VWYWwpOwogCi0gICAg
ICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdEluZGV4KSA8IHNvdXJjZS5sZW5ndGgo
KSkKLSAgICAgICAgICAgIHNvdXJjZVJhbmdlcy5hcHBlbmQoU3RyaW5nUmFuZ2UobGFzdEluZGV4
LCBzb3VyY2UubGVuZ3RoKCkgLSBsYXN0SW5kZXgpKTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihsYXN0SW5kZXgpIDwgc291cmNlTGVuKQorICAgICAgICAgICAgc291cmNlUmFu
Z2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIHNvdXJjZUxlbiAtIGxhc3RJbmRleCkp
OwogCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTcGxpY2VTdWJzdHJpbmdzV2l0
aFNlcGFyYXRvcnMoZXhlYywgc291cmNlVmFsLCBzb3VyY2UsIHNvdXJjZVJhbmdlcy5kYXRhKCks
IHNvdXJjZVJhbmdlcy5zaXplKCksIHJlcGxhY2VtZW50cy5kYXRhKCksIHJlcGxhY2VtZW50cy5z
aXplKCkpKTsKICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>