<?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>89673</bug_id>
          
          <creation_ts>2012-06-21 10:09:59 -0700</creation_ts>
          <short_desc>showModalDialog fix creates risk of never returning from RunLoop::performWork, potentially blocking other event sources</short_desc>
          <delta_ts>2012-06-21 11:54:43 -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>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>darin</cc>
    
    <cc>jonlee</cc>
    
    <cc>levin+threading</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>654644</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-21 10:09:59 -0700</bug_when>
    <thetext>showModalDialog fix creates risk of never returning from RunLoop::performWork, potentially starving other event sources

The fix in question was for bug 89590 and can be seen at http://trac.webkit.org/changeset/120879

The scenario is as follows:
-RunLoop::performWork() is invoked and there is 1 function on the queue
-Handling that one function results in 1 more function being placed on the queue
-Handling that one results in yet another being placed on the queue
-Ad infinitum

Therefore that invocation of performWork() never returns and all other event sources are blocked.

Before r120879 this could never happen because we only ever did the amount of work that was in the queue when performWork() was invoked.  Any additional work that was enqueued would have to wait until the next time performWork() was invoked which would be after other event sources had a chance to spin.

We can approximate that same behavior with a simple count.  Patch is coming up.

In radar as &lt;rdar://problem/11718988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654675</commentid>
    <comment_count>1</comment_count>
      <attachid>148832</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-21 10:36:38 -0700</bug_when>
    <thetext>Created attachment 148832
Patch v1 - Proposed fix

This patch implements a rule where we only perform the number of functions in the queue at the time performWork was called.  Additional functions will wait until the next time performWork is called.

This very closely approximates our behavior before http://trac.webkit.org/changeset/120879.

I originally re-wrote the loop to be a for loop but that required acquiring the lock before the for loop *just* to get the function count.

By far the common case in RunLoop::performWork is that it is handling 1 function.  So the for-loop solution would&apos;ve required  acquiring and releasing the lock twice just to perform one function.

Having this simple branch inside the loop seems much more efficient than having that addition lock acquisition in the common case of 1 function, but I&apos;m open to input on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654677</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-21 10:39:52 -0700</bug_when>
    <thetext>Attachment 148832 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/RunLoop.cpp:82:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654678</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-21 10:40:08 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=148832) [details]

&gt; By far the common case in RunLoop::performWork is that it is handling 1 function.  So the for-loop solution would&apos;ve required  acquiring and releasing the lock twice just to perform one function.
&gt; 
&gt; Having this simple branch inside the loop seems much more efficient than having that addition lock acquisition in the common case of 1 function, but I&apos;m open to input on this.

I thought of a better way.  New patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654687</commentid>
    <comment_count>4</comment_count>
      <attachid>148837</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-21 10:48:04 -0700</bug_when>
    <thetext>Created attachment 148837
Patch v2 - Avoid taking the lock twice for the common case *and* avoid the branch comparison in Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654698</commentid>
    <comment_count>5</comment_count>
      <attachid>148837</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-06-21 11:01:07 -0700</bug_when>
    <thetext>Comment on attachment 148837
Patch v2 - Avoid taking the lock twice for the common case *and* avoid the branch comparison in Patch v1

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

I know Anders will review too. Looks fine to me, thought.

&gt; Source/WebCore/platform/RunLoop.cpp:72
&gt; +    // we guarantee that we will occassionally return from the run loop and other event sources will have

Typo: occasionally has only one s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654715</commentid>
    <comment_count>6</comment_count>
      <attachid>148837</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-06-21 11:14:38 -0700</bug_when>
    <thetext>Comment on attachment 148837
Patch v2 - Avoid taking the lock twice for the common case *and* avoid the branch comparison in Patch v1

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

&gt; Source/WebCore/platform/RunLoop.cpp:90
&gt; +    for (size_t functionsHandled = 1; functionsHandled &lt; functionsToHandle; functionsHandled++) {

pre, not post, plz 2 fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654723</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-21 11:21:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 148837 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148837&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/RunLoop.cpp:90
&gt; &gt; +    for (size_t functionsHandled = 1; functionsHandled &lt; functionsToHandle; functionsHandled++) {
&gt; 
&gt; pre, not post, plz 2 fix

Definitely fixed locally.

Waiting to land until after Anders has also taken a look</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654765</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-21 11:54:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/120954</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148832</attachid>
            <date>2012-06-21 10:36:38 -0700</date>
            <delta_ts>2012-06-21 10:48:04 -0700</delta_ts>
            <desc>Patch v1 - Proposed fix</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>3409</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MGFlMjAwLi41ODM4ZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMDYtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMTcxODk4OD4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04OTY3MworICAgICAgICBzaG93TW9kYWxEaWFsb2cgZml4IGNyZWF0
ZXMgcmlzayBvZiBuZXZlciByZXR1cm5pbmcgZnJvbSBSdW5Mb29wOjpwZXJmb3JtV29yaywgcG90
ZW50aWFsbHkgYmxvY2tpbmcgb3RoZXIgZXZlbnQgc291cmNlcworCisgICAgICAgIEluIGNhc2Ug
aGFuZGxpbmcgYSBmdW5jdGlvbiBvbiB0aGUgcXVldWUgcGxhY2VzIGFkZGl0aW9uYWwgZnVuY3Rp
b25zIG9uIHRoZSBxdWV1ZSwgd2Ugc2hvdWxkCisgICAgICAgIGxpbWl0IHRoZSBudW1iZXIgb2Yg
ZnVuY3Rpb25zIGVhY2ggaW52b2NhdGlvbiBvZiBwZXJmb3JtV29yaygpIHBlcmZvcm1zIHNvIGl0
IGNhbiByZXR1cm4gYW5kCisgICAgICAgIG90aGVyIGV2ZW50IHNvdXJjZXMgaGF2ZSBhIGNoYW5j
ZSB0byBzcGluLgorCisgICAgICAgIFRoZSBzaG93TW9kYWxEaWFsb2cgZml4IGluIHF1ZXN0aW9u
IGlzIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEyMDg3OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vUnVuTG9vcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpwZXJmb3JtV29yayk6IElmIHRoZXJlIGFy
ZSBvbmx5IE4gZnVuY3Rpb25zIGluIHRoZSBxdWV1ZSB3aGVuIHBlcmZvcm1Xb3JrIGlzIGNhbGxl
ZCwKKyAgICAgICAgICBvbmx5IGhhbmRsZSB1cCB0byBOIGZ1bmN0aW9ucyBiZWZvcmUgcmV0dXJu
aW5nLiBBbnkgYWRkaXRpb25hbCBmdW5jdGlvbnMgd2lsbCBiZSBoYW5kbGVkIHRoZSBuZXh0IHRp
bWUKKyAgICAgICAgICB0aGUgcnVubG9vcCBzcGlucy4KKwogMjAxMi0wNi0yMSAgVGFpanUgVHN1
aWtpICA8dHppa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkg
RmlsZVN5c3RlbSBjYWxsYmFja3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1J1bkxvb3AuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVuTG9vcC5jcHAKaW5kZXgg
ZGE3Mzg5ZC4uNTE2MGNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVu
TG9vcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVuTG9vcC5jcHAKQEAgLTU3
LDE1ICs1NywzNCBAQCBSdW5Mb29wKiBSdW5Mb29wOjptYWluKCkKIAogdm9pZCBSdW5Mb29wOjpw
ZXJmb3JtV29yaygpCiB7CisgICAgLy8gT25lIHBvc3NpYmxlIHNjZW5hcmlvIHdoZW4gaGFuZGxp
bmcgdGhlIGZ1bmN0aW9uIHF1ZXVlIGlzIGFzIGZvbGxvd3M6CisgICAgLy8gLSBSdW5Mb29wOjpw
ZXJmb3JtV29yaygpIGlzIGludm9rZWQgYW5kIHRoZXJlIGlzIDEgZnVuY3Rpb24gb24gdGhlIHF1
ZXVlCisgICAgLy8gLSBIYW5kbGluZyB0aGF0IG9uZSBmdW5jdGlvbiByZXN1bHRzIGluIDEgbW9y
ZSBmdW5jdGlvbiBiZWluZyBwbGFjZWQgb24gdGhlIHF1ZXVlCisgICAgLy8gLSBIYW5kbGluZyB0
aGF0IG9uZSByZXN1bHRzIGluIHlldCBhbm90aGVyIGJlaW5nIHBsYWNlZCBvbiB0aGUgcXVldWUK
KyAgICAvLyAtIEFuZCBzbyBvbgorICAgIC8vCisgICAgLy8gSW4gdGhpcyBzaXR1YXRpb24sIG9u
ZSBpbnZvY2F0aW9uIG9mIHBlcmZvcm1Xb3JrKCkgbmV2ZXIgcmV0dXJucyBhbmQgYWxsIG90aGVy
IGV2ZW50IHNvdXJjZXMgYXJlIGJsb2NrZWQuCisgICAgLy8gQnkgb25seSBoYW5kbGluZyB1cCB0
byB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IHdlcmUgaW4gdGhlIHF1ZXVlIHdoZW4gcGVy
Zm9ybVdvcmsoKSBpcyBjYWxsZWQKKyAgICAvLyB3ZSBndWFyYW50ZWUgdGhhdCB3ZSB3aWxsIG9j
Y2Fzc2lvbmFsbHkgcmV0dXJuIGZyb20gdGhlIHJ1biBsb29wIGFuZCBvdGhlciBldmVudCBzb3Vy
Y2VzIHdpbGwgaGF2ZQorICAgIC8vIGEgY2hhbmNlIHRvIHNwaW4uCisKICAgICBGdW5jdGlvbjx2
b2lkKCk+IGZ1bmN0aW9uOworICAgIHNpemVfdCBmdW5jdGlvbnNUb0hhbmRsZSA9IDA7CisgICAg
c2l6ZV90IGZ1bmN0aW9uc0hhbmRsZWQgPSAwOwogICAgIAotICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgZG8gewogICAgICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gaGFuZGxlIHRoZSBmdW5jdGlv
bnMgaW4gdGhlIHF1ZXVlIG9uZSBhdCBhIHRpbWUgYmVjYXVzZSB3aGlsZSBpbnNpZGUgb25lIG9m
IHRoZXNlCiAgICAgICAgIC8vIGZ1bmN0aW9ucyB3ZSBtaWdodCByZS1lbnRlciBSdW5Mb29wOjpw
ZXJmb3JtV29yaygpIGFuZCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gcGljayB1cCB3aGVyZSB3ZSBs
ZWZ0IG9mZi4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvODk1OTAgZm9yIG1v
cmUgZGlzY3Vzc2lvbi4KIAogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9mdW5jdGlvblF1ZXVlTG9jayk7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25zVG9IYW5k
bGUgPT0gMCkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbnNUb0hhbmRsZSA9IG1fZnVuY3Rpb25R
dWV1ZS5zaXplKCk7CisKKyAgICAgICAgICAgIC8vIEV2ZW4gaWYgd2Ugc3RhcnQgb2ZmIHdpdGgg
TiBmdW5jdGlvbnMgdG8gaGFuZGxlIGFuZCB3ZSd2ZSBvbmx5IGhhbmRsZWQgbGVzcyB0aGFuIE4g
ZnVuY3Rpb25zLCB0aGUgcXVldWUKKyAgICAgICAgICAgIC8vIHN0aWxsIG1pZ2h0IGJlIGVtcHR5
IGJlY2F1c2UgdGhvc2UgZnVuY3Rpb25zIG1pZ2h0IGhhdmUgYmVlbiBoYW5kbGVkIGluIGFuIGlu
bmVyIFJ1bkxvb3A6OnBlcmZvcm1Xb3JrKCkuCisgICAgICAgICAgICAvLyBJbiB0aGF0IGNhc2Ug
d2Ugc2hvdWxkIGJhaWwgaGVyZS4KICAgICAgICAgICAgIGlmIChtX2Z1bmN0aW9uUXVldWUuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC03Myw3ICs5Miw4IEBAIHZvaWQg
UnVuTG9vcDo6cGVyZm9ybVdvcmsoKQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmdW5j
dGlvbigpOwotICAgIH0KKyAgICAgICAgKytmdW5jdGlvbnNIYW5kbGVkOworICAgIH0gd2hpbGUg
KGZ1bmN0aW9uc0hhbmRsZWQgPCBmdW5jdGlvbnNUb0hhbmRsZSk7CiB9CiAKIHZvaWQgUnVuTG9v
cDo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148837</attachid>
            <date>2012-06-21 10:48:04 -0700</date>
            <delta_ts>2012-06-21 11:14:38 -0700</delta_ts>
            <desc>Patch v2 - Avoid taking the lock twice for the common case *and* avoid the branch comparison in Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>3656</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MGFlMjAwLi41ODM4ZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMDYtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMTcxODk4OD4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04OTY3MworICAgICAgICBzaG93TW9kYWxEaWFsb2cgZml4IGNyZWF0
ZXMgcmlzayBvZiBuZXZlciByZXR1cm5pbmcgZnJvbSBSdW5Mb29wOjpwZXJmb3JtV29yaywgcG90
ZW50aWFsbHkgYmxvY2tpbmcgb3RoZXIgZXZlbnQgc291cmNlcworCisgICAgICAgIEluIGNhc2Ug
aGFuZGxpbmcgYSBmdW5jdGlvbiBvbiB0aGUgcXVldWUgcGxhY2VzIGFkZGl0aW9uYWwgZnVuY3Rp
b25zIG9uIHRoZSBxdWV1ZSwgd2Ugc2hvdWxkCisgICAgICAgIGxpbWl0IHRoZSBudW1iZXIgb2Yg
ZnVuY3Rpb25zIGVhY2ggaW52b2NhdGlvbiBvZiBwZXJmb3JtV29yaygpIHBlcmZvcm1zIHNvIGl0
IGNhbiByZXR1cm4gYW5kCisgICAgICAgIG90aGVyIGV2ZW50IHNvdXJjZXMgaGF2ZSBhIGNoYW5j
ZSB0byBzcGluLgorCisgICAgICAgIFRoZSBzaG93TW9kYWxEaWFsb2cgZml4IGluIHF1ZXN0aW9u
IGlzIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEyMDg3OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vUnVuTG9vcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpwZXJmb3JtV29yayk6IElmIHRoZXJlIGFy
ZSBvbmx5IE4gZnVuY3Rpb25zIGluIHRoZSBxdWV1ZSB3aGVuIHBlcmZvcm1Xb3JrIGlzIGNhbGxl
ZCwKKyAgICAgICAgICBvbmx5IGhhbmRsZSB1cCB0byBOIGZ1bmN0aW9ucyBiZWZvcmUgcmV0dXJu
aW5nLiBBbnkgYWRkaXRpb25hbCBmdW5jdGlvbnMgd2lsbCBiZSBoYW5kbGVkIHRoZSBuZXh0IHRp
bWUKKyAgICAgICAgICB0aGUgcnVubG9vcCBzcGlucy4KKwogMjAxMi0wNi0yMSAgVGFpanUgVHN1
aWtpICA8dHppa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkg
RmlsZVN5c3RlbSBjYWxsYmFja3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1J1bkxvb3AuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVuTG9vcC5jcHAKaW5kZXgg
ZGE3Mzg5ZC4uNmRhZGVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVu
TG9vcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVuTG9vcC5jcHAKQEAgLTU3
LDE1ICs1Nyw0MyBAQCBSdW5Mb29wKiBSdW5Mb29wOjptYWluKCkKIAogdm9pZCBSdW5Mb29wOjpw
ZXJmb3JtV29yaygpCiB7CisgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIGhhbmRsZSB0aGUgZnVu
Y3Rpb25zIGluIHRoZSBxdWV1ZSBvbmUgYXQgYSB0aW1lIGJlY2F1c2Ugd2hpbGUgaW5zaWRlIG9u
ZSBvZiB0aGVzZQorICAgIC8vIGZ1bmN0aW9ucyB3ZSBtaWdodCByZS1lbnRlciBSdW5Mb29wOjpw
ZXJmb3JtV29yaygpIGFuZCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gcGljayB1cCB3aGVyZSB3ZSBs
ZWZ0IG9mZi4KKyAgICAvLyBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi84OTU5MCBmb3IgbW9yZSBk
aXNjdXNzaW9uLgorCisgICAgLy8gT25lIHBvc3NpYmxlIHNjZW5hcmlvIHdoZW4gaGFuZGxpbmcg
dGhlIGZ1bmN0aW9uIHF1ZXVlIGlzIGFzIGZvbGxvd3M6CisgICAgLy8gLSBSdW5Mb29wOjpwZXJm
b3JtV29yaygpIGlzIGludm9rZWQgYW5kIHRoZXJlIGlzIDEgZnVuY3Rpb24gb24gdGhlIHF1ZXVl
CisgICAgLy8gLSBIYW5kbGluZyB0aGF0IG9uZSBmdW5jdGlvbiByZXN1bHRzIGluIDEgbW9yZSBm
dW5jdGlvbiBiZWluZyBwbGFjZWQgb24gdGhlIHF1ZXVlCisgICAgLy8gLSBIYW5kbGluZyB0aGF0
IG9uZSByZXN1bHRzIGluIHlldCBhbm90aGVyIGJlaW5nIHBsYWNlZCBvbiB0aGUgcXVldWUKKyAg
ICAvLyAtIEFuZCBzbyBvbgorICAgIC8vCisgICAgLy8gSW4gdGhpcyBzaXR1YXRpb24sIG9uZSBp
bnZvY2F0aW9uIG9mIHBlcmZvcm1Xb3JrKCkgbmV2ZXIgcmV0dXJucyBhbmQgYWxsIG90aGVyIGV2
ZW50IHNvdXJjZXMgYXJlIGJsb2NrZWQuCisgICAgLy8gQnkgb25seSBoYW5kbGluZyB1cCB0byB0
aGUgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IHdlcmUgaW4gdGhlIHF1ZXVlIHdoZW4gcGVyZm9y
bVdvcmsoKSBpcyBjYWxsZWQKKyAgICAvLyB3ZSBndWFyYW50ZWUgdGhhdCB3ZSB3aWxsIG9jY2Fz
c2lvbmFsbHkgcmV0dXJuIGZyb20gdGhlIHJ1biBsb29wIGFuZCBvdGhlciBldmVudCBzb3VyY2Vz
IHdpbGwgaGF2ZQorICAgIC8vIGEgY2hhbmNlIHRvIHNwaW4uCisKICAgICBGdW5jdGlvbjx2b2lk
KCk+IGZ1bmN0aW9uOwotICAgIAotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIC8vIEl0IGlz
IGltcG9ydGFudCB0byBoYW5kbGUgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgcXVldWUgb25lIGF0IGEg
dGltZSBiZWNhdXNlIHdoaWxlIGluc2lkZSBvbmUgb2YgdGhlc2UKLSAgICAgICAgLy8gZnVuY3Rp
b25zIHdlIG1pZ2h0IHJlLWVudGVyIFJ1bkxvb3A6OnBlcmZvcm1Xb3JrKCkgYW5kIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byBwaWNrIHVwIHdoZXJlIHdlIGxlZnQgb2ZmLgotICAgICAgICAvLyBTZWUg
aHR0cDovL3dlYmtpdC5vcmcvYi84OTU5MCBmb3IgbW9yZSBkaXNjdXNzaW9uLgorICAgIHNpemVf
dCBmdW5jdGlvbnNUb0hhbmRsZSA9IDA7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2Z1bmN0aW9uUXVldWVMb2NrKTsKKyAgICAgICAgZnVuY3Rpb25zVG9IYW5kbGUgPSBt
X2Z1bmN0aW9uUXVldWUuc2l6ZSgpOworCisgICAgICAgIGlmIChtX2Z1bmN0aW9uUXVldWUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIGZ1bmN0aW9uID0gbV9mdW5j
dGlvblF1ZXVlLnRha2VGaXJzdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uKCk7CisKKyAgICBm
b3IgKHNpemVfdCBmdW5jdGlvbnNIYW5kbGVkID0gMTsgZnVuY3Rpb25zSGFuZGxlZCA8IGZ1bmN0
aW9uc1RvSGFuZGxlOyBmdW5jdGlvbnNIYW5kbGVkKyspIHsKICAgICAgICAgewogICAgICAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnVuY3Rpb25RdWV1ZUxvY2spOworCisgICAgICAgICAg
ICAvLyBFdmVuIGlmIHdlIHN0YXJ0IG9mZiB3aXRoIE4gZnVuY3Rpb25zIHRvIGhhbmRsZSBhbmQg
d2UndmUgb25seSBoYW5kbGVkIGxlc3MgdGhhbiBOIGZ1bmN0aW9ucywgdGhlIHF1ZXVlCisgICAg
ICAgICAgICAvLyBzdGlsbCBtaWdodCBiZSBlbXB0eSBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBt
aWdodCBoYXZlIGJlZW4gaGFuZGxlZCBpbiBhbiBpbm5lciBSdW5Mb29wOjpwZXJmb3JtV29yaygp
LgorICAgICAgICAgICAgLy8gSW4gdGhhdCBjYXNlIHdlIHNob3VsZCBiYWlsIGhlcmUuCiAgICAg
ICAgICAgICBpZiAobV9mdW5jdGlvblF1ZXVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKIAo=
</data>
<flag name="review"
          id="156698"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>