<?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>25902</bug_id>
          
          <creation_ts>2009-05-20 18:33:01 -0700</creation_ts>
          <short_desc>Need to implement WorkerContext.close()</short_desc>
          <delta_ts>2009-06-01 02:00:48 -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 JavaScript</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew Wilson">atwilson</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>122232</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-05-20 18:33:01 -0700</bug_when>
    <thetext>There&apos;s still some argument about whether we need to support close events on Worker and WorkerContext arguments, since they expose information about garbage collection.

However, we should still support an explicit WorkerContext.close() API to allow workers to shut themselves down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122724</commentid>
    <comment_count>1</comment_count>
      <attachid>30590</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-05-22 13:09:14 -0700</bug_when>
    <thetext>Created attachment 30590
Implementation of WorkerContext.close() + layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122772</commentid>
    <comment_count>2</comment_count>
      <attachid>30590</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 20:08:48 -0700</bug_when>
    <thetext>Comment on attachment 30590
Implementation of WorkerContext.close() + layout test

Looks good to me.  I think the test would be slightly more clear if you called worker.postMessge(&apos;ping&apos;) *before* calling close, to show that the ping worked before the close.

This looks fine though.  Marking r+, someone else will have to land this though because I&apos;m about to get on a plane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122807</commentid>
    <comment_count>3</comment_count>
      <attachid>30590</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-22 23:37:04 -0700</bug_when>
    <thetext>Comment on attachment 30590
Implementation of WorkerContext.close() + layout test

Looks like this has a race condition in the following situation:
1) Worker thread decides to close itself, calling stop(), and subsequently destroying WorkerContext object, notifying the proxy, and exiting the thread itself.
2) At the same time, a message is sent from the main thread to the worker thread. Since it takes time to deliver a workerContextDestroyed notification, this message will be added to deleted WorkerContext&apos;s queue.

I think that the right way to implement close() is send a custom message to the proxy, asking it to terminate the context in response, and to wait for this in some &quot;death row&quot; state that prevents any other communication with the proxy.

Please add a test for this situation (if at all possible, one that would crash with this patch). Please also add a test for a situation where the worker decides to close itself from an XHR onreadystatechange callback, not in response to a message from the main thread. It would be nice to verify that this doesn&apos;t introduce leaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123151</commentid>
    <comment_count>4</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-05-26 11:01:52 -0700</bug_when>
    <thetext>I&apos;ll add the requested tests.

I&apos;m not certain that there&apos;s a race condition - the reason is that the event queue for the worker (WorkerRunLoop) is associated with the WorkerThread, not with the WorkerContext. So you can still safely invoke m_workerThread-&gt;runLoop().postTask() from postMessageToWorkerContext() even after the WorkerContext itself has gone away. There also should be no leak, as once the WorkerThread is freed, the WorkerRunLoop and any events left on the queue will also be freed (note that the MessageQueue may have some items left on it anyway, since MessageQueue::kill doesn&apos;t empty the queue).

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123173</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-26 13:09:38 -0700</bug_when>
    <thetext>Indeed, I was wrong about the race condition.

Does this implementation of close() do what the spec says? Omitting MessagePort related steps, it is:
1) Queue a task to fire a simple event called close at the WorkerGlobalScope object.
2) Set the worker&apos;s WorkerGlobalScope object&apos;s closing flag to true (which means that new tasks do not get added to event loop, but those already in the loop will be processed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123179</commentid>
    <comment_count>6</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-05-26 13:47:19 -0700</bug_when>
    <thetext>In the first case, no, we don&apos;t fire off a close event - the reason why is because I&apos;m still working to convince IanH that we should remove the close event from WorkerGlobalScope (the reason is that we don&apos;t want to expose the internal behavior of garbage collection via the close event, and generating a close event *only* in response to an explicit close() invocation seems of dubious utility).

Thanks for pointing out the spec language around proper handling of events that are already in the queue - I missed that behavior since it&apos;s described in a different part of the spec.

It seems like the best way to do that is to have close send an event via the queue which itself calls WorkerThread::stop(). Any timer/XHR events that come in after that event will get dropped. Do you see any problems with that approach?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123244</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-26 23:59:40 -0700</bug_when>
    <thetext>Sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123306</commentid>
    <comment_count>8</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-05-27 11:13:04 -0700</bug_when>
    <thetext>Following up with this - turns out that just queueing up a task to invoke close() won&apos;t work. The reason is that WorkerRunLoop does not guarantee ordering in the dispatch of pending events (MessageQueue.waitForMessageFilteredWithTimeout() will only return MessageQueueTimeout if the queue is empty, meaning that timer events are only fired if/when the queue is empty.

I&apos;m discussing with ianh whether we should change close() to just drop pending events (if a worker wants different functionality, it could just use setTimeout(close, 0);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123476</commentid>
    <comment_count>9</comment_count>
      <attachid>30752</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-05-28 14:50:59 -0700</bug_when>
    <thetext>Created attachment 30752
proposed patch with requested changes

Updated patch with requested tests. The latest spec for WorkerContext.close() discards all pending events, so I&apos;ve updated the code and tests to reflect this.

Note that there&apos;s a minor issue with pending XMLHttpRequest events - those aren&apos;t always delivered via the event queue, so if you call WorkerContext.close() from an XHR callback you can still get another event callback invoked before the thread exits. I&apos;ll log a separate bug for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123795</commentid>
    <comment_count>10</comment_count>
      <attachid>30752</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-01 00:35:26 -0700</bug_when>
    <thetext>Comment on attachment 30752
proposed patch with requested changes

I normally prefer early return to nesting work inside if statements. So in close and postMessage we&apos;d put:

    if (m_closing)
        return;

At the start of the function, and then go on with the work of the function.

I much prefer change logs with per-function comments.

Given Alexey&apos;s previous comments this looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123807</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-01 01:17:14 -0700</bug_when>
    <thetext>Will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123813</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-01 02:00:48 -0700</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Adding         LayoutTests/fast/workers/resources/worker-close.js
Sending        LayoutTests/fast/workers/resources/worker-common.js
Adding         LayoutTests/fast/workers/worker-close-expected.txt
Adding         LayoutTests/fast/workers/worker-close.html
Adding         LayoutTests/http/tests/xmlhttprequest/workers/close-expected.txt
Adding         LayoutTests/http/tests/xmlhttprequest/workers/close.html
Adding         LayoutTests/http/tests/xmlhttprequest/workers/resources/close.js
Sending        WebCore/ChangeLog
Sending        WebCore/workers/WorkerContext.cpp
Sending        WebCore/workers/WorkerContext.h
Sending        WebCore/workers/WorkerContext.idl
Sending        WebCore/workers/WorkerMessagingProxy.cpp
Transmitting file data .............
Committed revision 44319.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30590</attachid>
            <date>2009-05-22 13:09:14 -0700</date>
            <delta_ts>2009-05-28 14:51:19 -0700</delta_ts>
            <desc>Implementation of WorkerContext.close() + layout test</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>5888</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMjlkZmMxLi44NTEyZGJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDUt
MjIgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBXb3JrZXJDb250ZXh0LmNsb3Nl
KCkKKworICAgICAgICAqIGZhc3Qvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWNvbW1vbi5qczoK
KyAgICAgICAgKG9ubWVzc2FnZSk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jbG9z
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItY2xv
c2UuaHRtbDogQWRkZWQuCisKIDIwMDktMDUtMjIgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
ICA8a2VubmV0aC5jaHJpc3RpYW5zZW5Ab3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9yZXNvdXJjZXMvd29ya2VyLWNvbW1vbi5qcyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9y
ZXNvdXJjZXMvd29ya2VyLWNvbW1vbi5qcwppbmRleCBjZmVhYmUyLi5lMDVmN2VjIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1jb21tb24uanMK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItY29tbW9uLmpz
CkBAIC0xMyw2ICsxMyw4IEBAIG9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkKICAgICAgICAgcG9z
dE1lc3NhZ2UoInBvbmciKTsKICAgICBlbHNlIGlmIChldnQuZGF0YSA9PSAiZnJlZXplIikKICAg
ICAgICAgd2hpbGUgKDEpIHt9CisgICAgZWxzZSBpZiAoZXZ0LmRhdGEgPT0gImNsb3NlIikKKyAg
ICAgICAgY2xvc2UoKTsKICAgICBlbHNlIGlmICgvZXZhbC4rLy50ZXN0KGV2dC5kYXRhKSkgewog
ICAgICAgICB0cnkgewogICAgICAgICAgICAgcG9zdE1lc3NhZ2UoZXZ0LmRhdGEuc3Vic3RyKDUp
ICsgIjogIiArIGV2YWwoZXZ0LmRhdGEuc3Vic3RyKDUpKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy93b3JrZXItY2xvc2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmFhMWJkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAK
K1Rlc3QgV29ya2VyQ29udGV4dC5jbG9zZSBmdW5jdGlvbmFsaXR5LiBTaG91bGQgcHJpbnQgYSBz
ZXJpZXMgb2YgUEFTUyBtZXNzYWdlcywgZm9sbG93ZWQgd2l0aCBET05FLgorCitQQVNTOiB0eXBl
b2YgY2xvc2U6IGZ1bmN0aW9uCitQQVNTOiBtZXNzYWdlcyBzZW50IGFmdGVyIGNsb3NlKCkgYXJl
IGlnbm9yZWQKK0RPTkUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dv
cmtlci1jbG9zZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jbG9zZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzE4Y2UKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLmh0bWwKQEAg
LTAsMCArMSw0OCBAQAorPGJvZHk+Cis8cD5UZXN0IFdvcmtlckNvbnRleHQuY2xvc2UgZnVuY3Rp
b25hbGl0eS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMsIGZvbGxvd2Vk
IHdpdGggRE9ORS48L3A+Cis8ZGl2IGlkPXJlc3VsdD48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlv
biBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0Iiku
aW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgd29ya2Vy
ID0gbmV3IFdvcmtlcigncmVzb3VyY2VzL3dvcmtlci1jb21tb24uanMnKTsKK3ZhciB0aW1lb3V0
ID0gMDsKKword29ya2VyLnBvc3RNZXNzYWdlKCJldmFsIHR5cGVvZiBjbG9zZSIpOword29ya2Vy
Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgIGlmIChldnQuZGF0YSA9PSAidHlwZW9m
IGNsb3NlOiBmdW5jdGlvbiIpCisgICAgICAgIGxvZygiUEFTUzogIiArIGV2dC5kYXRhKTsKKyAg
ICBlbHNlCisgICAgICAgIGxvZygiRkFJTDogIiArIGV2dC5kYXRhKTsKKyAgICB3b3JrZXIub25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDogUmVjZWl2ZWQgbWVz
c2FnZSBhZnRlciB3b3JrZXIgY2xvc2VkOiAiICsgZXZ0LmRhdGEpOworICAgICAgICBkb25lKCk7
CisgICAgfTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UoImNsb3NlIik7CisgICAgd29ya2VyLnBv
c3RNZXNzYWdlKCJwaW5nIik7CisgICAgdGltZW91dCA9IHNldFRpbWVvdXQobm9NZXNzYWdlLCAx
MDAwKTsKK30KKworZnVuY3Rpb24gbm9NZXNzYWdlKCkgeworICAgIGxvZygiUEFTUzogbWVzc2Fn
ZXMgc2VudCBhZnRlciBjbG9zZSgpIGFyZSBpZ25vcmVkIik7CisgICAgZG9uZSgpOworfQorCitm
dW5jdGlvbiBkb25lKCkgeworICAgIGlmICh0aW1lb3V0KQorICAgICAgICBjbGVhclRpbWVvdXQo
dGltZW91dCk7CisgICAgbG9nKCJET05FIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDE0YWQ4OC4uNWQwNTNhMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAwOS0wNS0yMiAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIFdvcmtl
ckNvbnRleHQuY2xvc2UoKQorCisgICAgICAgIFRlc3Q6IGZhc3Qvd29ya2Vycy93b3JrZXItY2xv
c2UuaHRtbAorCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmNsb3NlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorICAgICAg
ICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyTWVzc2FnaW5nUHJveHk6OndvcmtlckNvbnRleHREZXN0cm95ZWRJbnRlcm5hbCk6CisK
IDIwMDktMDUtMjIgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgRml4IHRoZSBjYWxsIHRvIGVkaXRpbmdDYW5jZWxsZWQgdG8gYmUgdGhpcy5fZWRpdGlu
Z0NhbmNlbGxlZCwgc2luY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCA1ODgyZGRi
Li4zOGNjMDAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0xMDYsNiArMTA2LDEx
IEBAIFdvcmtlckxvY2F0aW9uKiBXb3JrZXJDb250ZXh0Ojpsb2NhdGlvbigpIGNvbnN0CiAgICAg
cmV0dXJuIG1fbG9jYXRpb24uZ2V0KCk7CiB9CiAKK3ZvaWQgV29ya2VyQ29udGV4dDo6Y2xvc2Uo
KQoreworICAgIG1fdGhyZWFkLT5zdG9wKCk7Cit9CisKIFdvcmtlck5hdmlnYXRvciogV29ya2Vy
Q29udGV4dDo6bmF2aWdhdG9yKCkgY29uc3QKIHsKICAgICBpZiAoIW1fbmF2aWdhdG9yKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmgKaW5kZXggYmZkZGVmMS4uNWIyMGZhNCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCkBAIC04NCw2ICs4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gV29ya2VyR2xvYmFsU2NvcGUKICAgICAgICAgV29ya2VyQ29udGV4dCogc2VsZigpIHsgcmV0
dXJuIHRoaXM7IH0KICAgICAgICAgV29ya2VyTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgY2xvc2UoKTsKIAogICAgICAgICAvLyBXb3JrZXJVdGlscwogICAgICAgICB2
b2lkIGltcG9ydFNjcmlwdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIGNvbnN0IFN0cmlu
ZyYgY2FsbGVyVVJMLCBpbnQgY2FsbGVyTGluZSwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuaWRsCmluZGV4IGQ5MWM2ZTcuLjYwNTY4ZmIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5pZGwKQEAgLTQwLDcgKzQwLDcgQEAgbW9kdWxlIHRocmVhZHMgewogICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBXb3JrZXJDb250ZXh0IHNlbGY7CiAjZW5k
aWYKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gV29ya2VyTG9jYXRp
b24gbG9jYXRpb247Ci0gICAgICAgIC8vIHZvaWQgY2xvc2UoKTsKKyAgICAgICAgdm9pZCBjbG9z
ZSgpOwogICAgICAgICAvLyAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2xvc2U7
CiAgICAgICAgIC8vICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBiL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKaW5kZXggNGIzNDY1OC4uMDdl
ZTRmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNw
cAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCkBAIC0yOTYs
NiArMjk2LDcgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyQ29udGV4dERlc3Ry
b3llZEludGVybmFsKCkKIHsKICAgICAvLyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayBpcyBh
bHdheXMgdGhlIGxhc3QgdG8gYmUgcGVyZm9ybWVkLCBzbyB0aGUgcHJveHkgaXMgbm90IG5lZWRl
ZCBmb3IgY29tbXVuaWNhdGlvbgogICAgIC8vIGluIGVpdGhlciBzaWRlIGFueSBtb3JlLiBIb3dl
dmVyLCB0aGUgV29ya2VyIG9iamVjdCBtYXkgc3RpbGwgZXhpc3QsIGFuZCBpdCBhc3N1bWVzIHRo
YXQgdGhlIHByb3h5IGV4aXN0cywgdG9vLgorICAgIG1fYXNrZWRUb1Rlcm1pbmF0ZSA9IHRydWU7
CiAgICAgbV93b3JrZXJUaHJlYWQgPSAwOwogICAgIGlmICghbV93b3JrZXJPYmplY3QpCiAgICAg
ICAgIGRlbGV0ZSB0aGlzOwo=
</data>
<flag name="review"
          id="15470"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30752</attachid>
            <date>2009-05-28 14:50:59 -0700</date>
            <delta_ts>2009-06-01 00:35:26 -0700</delta_ts>
            <desc>proposed patch with requested changes</desc>
            <filename>patchmaster.txt</filename>
            <type>text/plain</type>
            <size>14385</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMjlkZmMxLi5iM2NlZjUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDUt
MjIgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjU5MDIKKyAgICAgICAgQWRkZWQgV29ya2VyQ29udGV4dC5jbG9zZSgp
CisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jbG9zZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1jbG9zZS5qczogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC93b3JrZXJzL2Nsb3NlLmh0bWw6IEFk
ZGVkLgorCiAyMDA5LTA1LTIyICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGgu
Y2hyaXN0aWFuc2VuQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2Vz
L3dvcmtlci1jbG9zZS5qcyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvd29y
a2VyLWNsb3NlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDRiMDUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dv
cmtlci1jbG9zZS5qcwpAQCAtMCwwICsxLDI4IEBACisvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdv
cmtlciBoYW5kbGVzIHBlbmRpbmcgZXZlbnRzLiBNZXNzYWdlcyBhZnRlciBjbG9zZSgpIHdpbGwg
bm90IGJlIHNlbnQgdG8gdGhlIHBhcmVudCBwYWdlLCBzbyB3ZSB1c2UgZXhjZXB0aW9ucyBpbnN0
ZWFkIHRvIHJlcG9ydCBmYWlsdXJlcyBhZnRlciBjbG9zZSgpLgorb25tZXNzYWdlID0gZnVuY3Rp
b24oZXZ0KQoreworICAgIGlmIChldnQuZGF0YSA9PSAiY2xvc2VXaXRoUGVuZGluZ0V2ZW50cyIp
IHsKKyAgICAgICAgLy8gU2V0IGEgdGltZXIgdG8gZ2VuZXJhdGUgYW4gZXZlbnQgLSBtaW5pbXVt
IHRpbWVvdXQgaXMgMW1zLgorICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHBvc3RNZXNzYWdlKCJwZW5kaW5nIGV2ZW50IHByb2Nlc3NlZCIpOworICAgICAg
ICAgICAgICAgIHRocm93ICJzaG91bGQgbm90IGJlIGV4ZWN1dGVkIjsKKyAgICAgICAgICAgIH0s
IDEpOworICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKyAgICAgICAg
Ly8gTG9vcCBmb3IgMTAgbXMgc28gdGhlIHRpbWVyIGlzIHJlYWR5IHRvIGZpcmUKKyAgICAgICAg
d2hpbGUgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQgPCAxMDApCisgICAgICAgICAgICA7
CisgICAgICAgIC8vIE5vdyBjbG9zZSAtIHRpbWVyIHNob3VsZCBub3QgZmlyZQorICAgICAgICBj
bG9zZSgpOworICAgIH0gZWxzZSBpZiAoZXZ0LmRhdGEgPT0gInR5cGVvZkNsb3NlIikgeworICAg
ICAgICBwb3N0TWVzc2FnZSgidHlwZW9mIGNsb3NlOiAiICsgKHR5cGVvZiBjbG9zZSkpOworICAg
IH0gZWxzZSBpZiAoZXZ0LmRhdGEgPT0gImNsb3NlIikgeworICAgICAgICBjbG9zZSgpOworICAg
ICAgICBwb3N0TWVzc2FnZSgiU2hvdWxkIG5vdCBiZSBkZWxpdmVyZWQiKTsKKyAgICB9IGVsc2Ug
aWYgKGV2dC5kYXRhID09ICJwaW5nIikgeworICAgICAgICBwb3N0TWVzc2FnZSgicG9uZyIpOwor
ICAgIH0gZWxzZSBpZiAoZXZ0LmRhdGEgPT0gInRocm93IikgeworICAgICAgICB0aHJvdyAic2hv
dWxkIG5ldmVyIGJlIGV4ZWN1dGVkIjsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3N0TWVzc2Fn
ZSgiRkFJTDogVW5rbm93biBtZXNzYWdlIHR5cGU6ICIgKyBldnQuZGF0YSk7CisgICAgfQorfQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItY29t
bW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItY29tbW9u
LmpzCmluZGV4IGNmZWFiZTIuLmUwNWY3ZWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWNvbW1vbi5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1jb21tb24uanMKQEAgLTEzLDYgKzEzLDggQEAgb25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZ0KQogICAgICAgICBwb3N0TWVzc2FnZSgicG9uZyIpOwogICAg
IGVsc2UgaWYgKGV2dC5kYXRhID09ICJmcmVlemUiKQogICAgICAgICB3aGlsZSAoMSkge30KKyAg
ICBlbHNlIGlmIChldnQuZGF0YSA9PSAiY2xvc2UiKQorICAgICAgICBjbG9zZSgpOwogICAgIGVs
c2UgaWYgKC9ldmFsLisvLnRlc3QoZXZ0LmRhdGEpKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAg
ICAgICBwb3N0TWVzc2FnZShldnQuZGF0YS5zdWJzdHIoNSkgKyAiOiAiICsgZXZhbChldnQuZGF0
YS5zdWJzdHIoNSkpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3Jr
ZXItY2xvc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1j
bG9zZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Rm
NDBjOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXIt
Y2xvc2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOCBAQAorVGVzdCBXb3JrZXJDb250ZXh0LmNs
b3NlIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2Vz
LCBmb2xsb3dlZCB3aXRoIERPTkUuCisKK1BBU1M6IHR5cGVvZiBjbG9zZTogZnVuY3Rpb24KK1BB
U1M6IHJlY2VpdmVkIG1lc3NhZ2UgYmVmb3JlIGNsb3NlCitQQVNTOiBtZXNzYWdlcyBzZW50IGFm
dGVyIGNsb3NlKCkgYXJlIGlnbm9yZWQKK1BBU1M6IGNsb3NlKCkgZGlkIG5vdCBkaXNwYXRjaCBw
ZW5kaW5nIGV2ZW50cworRE9ORQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvd29ya2VyLWNsb3NlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNs
b3NlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2MGI4YgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY2xvc2UuaHRt
bApAQCAtMCwwICsxLDEwMSBAQAorPGJvZHk+Cis8cD5UZXN0IFdvcmtlckNvbnRleHQuY2xvc2Ug
ZnVuY3Rpb25hbGl0eS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMsIGZv
bGxvd2VkIHdpdGggRE9ORS48L3A+Cis8ZGl2IGlkPXJlc3VsdD48L2Rpdj4KKzxzY3JpcHQ+Citm
dW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVz
dWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCit7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFy
IHdvcmtlciA9IG5ldyBXb3JrZXIoJ3Jlc291cmNlcy93b3JrZXItY2xvc2UuanMnKTsKK3ZhciB0
aW1lb3V0ID0gMDsKKword29ya2VyLnBvc3RNZXNzYWdlKCJ0eXBlb2ZDbG9zZSIpOword29ya2Vy
Lm9ubWVzc2FnZSA9IHRlc3RUeXBlb2ZDbG9zZTsKKworZnVuY3Rpb24gdGVzdFR5cGVvZkNsb3Nl
KGV2dCkKK3sKKyAgICBpZiAoZXZ0LmRhdGEgPT0gInR5cGVvZiBjbG9zZTogZnVuY3Rpb24iKQor
ICAgICAgICBsb2coIlBBU1M6ICIgKyBldnQuZGF0YSk7CisgICAgZWxzZQorICAgICAgICBsb2co
IkZBSUw6ICIgKyBldnQuZGF0YSk7CisgICAgd29ya2VyLm9ubWVzc2FnZSA9IHRlc3RNZXNzYWdl
QWZ0ZXJDbG9zZTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UoInBpbmciKTsKK30KKworZnVuY3Rp
b24gdGVzdE1lc3NhZ2VBZnRlckNsb3NlKGV2dCkgeworICAgIGlmIChldnQuZGF0YSA9PSAicG9u
ZyIpCisgICAgICAgIGxvZygiUEFTUzogcmVjZWl2ZWQgbWVzc2FnZSBiZWZvcmUgY2xvc2UiKTsK
KyAgICBlbHNlCisgICAgICAgIGxvZygiRkFJTDogcmVjZWl2ZWQgdW5rbm93biByZXNwb25zZTog
IiArIGV2dC5kYXRhKTsKKworICAgIC8vIFRlbGwgdGhlIHdvcmtlciB0byBjbG9zZSwgdGhlbiBz
ZW5kIGEgZm9sbG93dXAgbWVzc2FnZQorICAgIC8vIHdoaWNoIHNob3VsZCBub3QgYmUgZGVsaXZl
cmVkLgorICAgIHdvcmtlci5wb3N0TWVzc2FnZSgiY2xvc2UiKTsKKyAgICB3b3JrZXIub25tZXNz
YWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDogUmVjZWl2ZWQgbWVzc2Fn
ZSBhZnRlciB3b3JrZXIgY2xvc2VkOiAiICsgZXZ0LmRhdGEpOworICAgICAgICBkb25lKCk7Cisg
ICAgfTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBtZXNzYWdlcyBkb24ndCBhcnJpdmUgYXQgdGhl
IHJlbW90ZSBlbmQgLSBzaW5jZSB0aGV5CisgICAgLy8gY2FuJ3Qgc2VuZCBiYWNrIHJlc3BvbnNl
IG1lc3NhZ2VzLCB3ZSdsbCBoYXZlIHRoZSB3b3JrZXIgdGhyb3cgYW4KKyAgICAvLyBleGNlcHRp
b24gaW5zdGVhZCAoZXJyb3JzIGFyZSBzdGlsbCBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIgZXZl
biBhZnRlcgorICAgIC8vIGNsb3NlKCkpLgorICAgIHdvcmtlci5wb3N0TWVzc2FnZSgidGhyb3ci
KTsKKyAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBsb2coIkZB
SUw6IG1lc3NhZ2UgZGVsaXZlcmVkIGFmdGVyIGNsb3NlKCk6ICIgKyBldnQubWVzc2FnZSk7Cisg
ICAgICAgIGRvbmUoKTsKKyAgICB9CisgICAgdGltZW91dCA9IHNldFRpbWVvdXQodGVzdFBlbmRp
bmdFdmVudHMsIDEwMDApOworfQorCitmdW5jdGlvbiB0ZXN0UGVuZGluZ0V2ZW50cygpCit7Cisg
ICAgbG9nKCJQQVNTOiBtZXNzYWdlcyBzZW50IGFmdGVyIGNsb3NlKCkgYXJlIGlnbm9yZWQiKTsK
KworICAgIC8vIE5vdyB0ZXN0IHRoYXQgd29ya2VycyBkbyBub3QgZGVsaXZlciBwZW5kaW5nIGV2
ZW50cworICAgIHdvcmtlciA9IG5ldyBXb3JrZXIoJ3Jlc291cmNlcy93b3JrZXItY2xvc2UuanMn
KTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UoImNsb3NlV2l0aFBlbmRpbmdFdmVudHMiKTsKKyAg
ICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDog
cGVuZGluZyBldmVudHMgc2hvdWxkIG5vdCBmaXJlOiIgKyBldnQuZGF0YSk7CisgICAgICAgIGRv
bmUoKTsKKyAgICB9CisgICAgd29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldnQpIHsKKyAgICAg
ICAgbG9nKCJGQUlMOiBwZW5kaW5nIGV2ZW50cyBzaG91bGQgbm90IGZpcmU6IiArIGV2dC5tZXNz
YWdlKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KKyAgICB0aW1lb3V0ID0gc2V0VGltZW91dCh0
ZXN0VGVybWluYXRlQWZ0ZXJDbG9zZSwgNTAwKTsKK30KKworZnVuY3Rpb24gdGVzdFRlcm1pbmF0
ZUFmdGVyQ2xvc2UoKQoreworICAgIGxvZygiUEFTUzogY2xvc2UoKSBkaWQgbm90IGRpc3BhdGNo
IHBlbmRpbmcgZXZlbnRzIik7CisgICAgd29ya2VyID0gbmV3IFdvcmtlcigncmVzb3VyY2VzL3dv
cmtlci1jbGFzcy5qcycpOworICAgIHdvcmtlci5wb3N0TWVzc2FnZSgiY2xvc2UiKTsKKyAgICB3
b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDogUmVj
ZWl2ZWQgbWVzc2FnZSBhZnRlciB3b3JrZXIgY2xvc2VkOiAiICsgZXZ0LmRhdGEpOworICAgICAg
ICBkb25lKCk7CisgICAgfTsKKyAgICAvLyBHaXZlIHdvcmtlciBhIGNoYW5jZSB0byBjbG9zZSBm
aXJzdCwgdGhlbiB0ZXJtaW5hdGUgaXQuCisgICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTsKKyAgICAgICAgZG9uZSgpOworICAg
IH0sIDUwMCk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKSB7CisgICAgaWYgKHRpbWVvdXQpCisgICAg
ICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKKyAgICBsb2coIkRPTkUiKTsKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC93b3JrZXJzL2Nsb3NlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvd29ya2Vy
cy9jbG9zZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDk4ODZlZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3Qvd29ya2Vycy9jbG9zZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACitUZXN0
cyBpbnZva2luZyBjbG9zZSgpIGluIHRoZSBtaWRkbGUgb2YgYW4gWE1MSHR0cFJlcXVlc3QuCisK
K1BBU1M6IEFzeW5jIHRlc3QKK1BBU1M6IHN5bmMgdGVzdAorRE9ORQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3dvcmtlcnMvY2xvc2UuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvd29ya2Vycy9jbG9zZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NGZmYzUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3dvcmtlcnMvY2xv
c2UuaHRtbApAQCAtMCwwICsxLDcyIEBACis8Ym9keT4KKzxwPlRlc3RzIGludm9raW5nIGNsb3Nl
KCkgaW4gdGhlIG1pZGRsZSBvZiBhbiBYTUxIdHRwUmVxdWVzdC48L3A+Cis8ZGl2IGlkPXJlc3Vs
dD48L2Rpdj4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBsb2cobWVzc2FnZSkKKyAgICB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
ZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKKyAgICB9CisKKyAgICB2YXIg
dGltZW91dCA9IDA7CisgICAgLy8gU3RhcnQgd2l0aCBhc3luYyB0ZXN0cworICAgIHRlc3RBc3lu
YygpOworCisgICAgZnVuY3Rpb24gdGVzdEFzeW5jKCkgeworICAgICAgICB2YXIgd29ya2VyID0g
bmV3IFdvcmtlcigncmVzb3VyY2VzL2Nsb3NlLmpzJyk7CisgICAgICAgIHdvcmtlci5vbmVycm9y
ID0gaGFuZGxlRXhjZXB0aW9uOworICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoImFzeW5jIik7
CisgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICgvRE9ORS8udGVzdChldnQuZGF0YSkpIHsKKyAgICAgICAgICAgICAgICAv
LyBHaXZlIHdvcmtlciBhIGNoYW5jZSB0byBjb21wbGV0ZSB0aGUgc2h1dGRvd24KKyAgICAgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBsb2co
IlBBU1M6IEFzeW5jIHRlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdFN5bmMoKTsKKyAg
ICAgICAgICAgICAgICB9LCAxMDAwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbG9nKCJFUlJPUiIpOworICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RTeW5jKCkgeworICAgICAg
ICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigncmVzb3VyY2VzL2Nsb3NlLmpzJyk7CisgICAgICAg
IHdvcmtlci5vbmVycm9yID0gaGFuZGxlRXhjZXB0aW9uOworICAgICAgICB3b3JrZXIucG9zdE1l
c3NhZ2UoInN5bmMiKTsKKyAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKC9ET05FLy50ZXN0KGV2dC5kYXRhKSkgeworICAg
ICAgICAgICAgICAgIC8vIEdpdmUgd29ya2VyIGEgY2hhbmNlIHRvIGNvbXBsZXRlIHRoZSBzaHV0
ZG93bgorICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgIGxvZygiUEFTUzogc3luYyB0ZXN0Iik7CisgICAgICAgICAgICAgICAgICAgIGxv
ZygiRE9ORSIpOworICAgICAgICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgICAg
fSwgMTAwMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZygiRVJS
T1IiKTsKKyAgICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgIGZ1bmN0aW9uIGRvbmUoKQorICAgIHsKKyAgICAgICAgY2xlYXJUaW1lb3V0
KHRpbWVvdXQpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGhhbmRsZUV4Y2VwdGlvbihldnQpCisgICAgeworICAgICAgICBsb2coIkVSUk9S
IC0gZXhjZXB0aW9uIHRocm93bjogIiArIGV2dC5tZXNzYWdlKTsKKyAgICAgICAgZG9uZSgpOwor
ICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC93b3JrZXJzL3Jlc291cmNlcy9jbG9zZS5qcyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvd29ya2Vycy9yZXNvdXJjZXMv
Y2xvc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2ZDM5MwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvd29y
a2Vycy9yZXNvdXJjZXMvY2xvc2UuanMKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gZG9uZSgp
Cit7CisgICAgcG9zdE1lc3NhZ2UoIkRPTkUiKTsKK30KKworb25tZXNzYWdlID0gZnVuY3Rpb24o
ZXZ0KSB7CisgICAgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgcmVxLm9ucmVhZHlz
dGF0ZWNoYW5nZSA9IHByb2Nlc3NTdGF0ZUNoYW5nZTsKKyAgICByZXEub3BlbigiR0VUIiwgIm1l
dGhvZHMuY2dpIiwgZXZ0LmRhdGEgPT0gImFzeW5jIik7CisgICAgcmVxLnNlbmQoIiIpOworfQor
Cit2YXIgZmFpbElmQ2FsbGVkID0gZmFsc2U7CitmdW5jdGlvbiBwcm9jZXNzU3RhdGVDaGFuZ2Uo
KQoreworICAgIGlmIChmYWlsSWZDYWxsZWQpCisgICAgICAgIC8vIEZJWE1FOiBYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZURhdGEoKSBjYWxscyBtdWx0aXBsZSBldmVudCBoYW5kbGVycyB3aXRo
b3V0IHJldHVybmluZyB0byB0aGUgZXZlbnQgbG9vcC4gV2UgbmVlZCBzb21lIHdheSB0byBzdG9w
IGFjdGl2ZSBYSFIgcmVxdWVzdHMsIGJ1dCBjYWxsaW5nIHN0b3BBY3RpdmVET01PYmplY3RzKCkg
aXMgdG9vIGRyYWNvbmlhbiAoc3RvcHMgZXZlcnl0aGluZywgaW5jbHVkaW5nIG5lc3RlZCB3b3Jr
ZXJzKS4KKyAgICAgICAgLy8gIHRocm93ICJGQUlMOiBwcm9jZXNzU3RhdGVDaGFuZ2UoIiArIHJl
cS5yZWFkeVN0YXRlICsgIikgY2FsbGVkIGFmdGVyIGNsb3NlKCkiOworICAgICAgICByZXR1cm47
CisKKyAgICBpZiAocmVxLnJlYWR5U3RhdGUgPiAxKSB7CisgICAgICAgIGZhaWxJZkNhbGxlZCA9
IHRydWU7CisgICAgICAgIGRvbmUoKTsKKyAgICAgICAgY2xvc2UoKTsKKyAgICB9Cit9CisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDE0
YWQ4OC4uMzI2NjI5MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0wNS0yMiAgRHJldyBXaWxzb24gIDxh
dHdpbHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTkw
MgorICAgICAgICBBZGRlZCBXb3JrZXJDb250ZXh0LmNsb3NlKCkKKworICAgICAgICBUZXN0OiBm
YXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLmh0bWwKKworICAgICAgICAqIHdvcmtlcnMvV29ya2Vy
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpjbG9zZSk6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmlkbDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJDb250ZXh0
RGVzdHJveWVkSW50ZXJuYWwpOgorCiAyMDA5LTA1LTIyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRt
YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCB0aGUgY2FsbCB0byBlZGl0aW5nQ2FuY2Vs
bGVkIHRvIGJlIHRoaXMuX2VkaXRpbmdDYW5jZWxsZWQsIHNpbmNlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5jcHAKaW5kZXggNTg4MmRkYi4uMzAwN2M4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmNwcApAQCAtNTgsNiArNTgsNyBAQCBXb3JrZXJDb250ZXh0OjpXb3JrZXJDb250ZXh0KGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocgogICAgICwgbV91
c2VyQWdlbnQodXNlckFnZW50KQogICAgICwgbV9zY3JpcHQobmV3IFdvcmtlclNjcmlwdENvbnRy
b2xsZXIodGhpcykpCiAgICAgLCBtX3RocmVhZCh0aHJlYWQpCisgICAgLCBtX2Nsb3NpbmcoZmFs
c2UpCiB7CiAgICAgc2V0U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwp
KTsKIH0KQEAgLTEwNiw2ICsxMDcsMTQgQEAgV29ya2VyTG9jYXRpb24qIFdvcmtlckNvbnRleHQ6
OmxvY2F0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9sb2NhdGlvbi5nZXQoKTsKIH0KIAordm9p
ZCBXb3JrZXJDb250ZXh0OjpjbG9zZSgpCit7CisgICAgaWYgKCFtX2Nsb3NpbmcpIHsKKyAgICAg
ICAgbV9jbG9zaW5nID0gdHJ1ZTsKKyAgICAgICAgbV90aHJlYWQtPnN0b3AoKTsKKyAgICB9Cit9
CisKIFdvcmtlck5hdmlnYXRvciogV29ya2VyQ29udGV4dDo6bmF2aWdhdG9yKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fbmF2aWdhdG9yKQpAQCAtMTQ4LDcgKzE1Nyw4IEBAIHZvaWQgV29ya2VyQ29u
dGV4dDo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZywgY29uc3QgU3RyaW5nJikKIAogdm9p
ZCBXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0g
ICAgbV90aHJlYWQtPndvcmtlck9iamVjdFByb3h5KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QobWVzc2FnZSk7CisgICAgaWYgKCFtX2Nsb3NpbmcpCisgICAgICAgIG1fdGhyZWFkLT53b3Jr
ZXJPYmplY3RQcm94eSgpLT5wb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KG1lc3NhZ2UpOwogfQog
CiB2b2lkIFdvcmtlckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9v
bCkKQEAgLTIyOSw2ICsyMzksOCBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OmNsZWFySW50ZXJ2YWwo
aW50IHRpbWVvdXRJZCkKIAogdm9pZCBXb3JrZXJDb250ZXh0OjpkaXNwYXRjaE1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogeworICAgIC8vIFNpbmNlIGNsb3NlKCkgc3RvcHMgdGhlIHRo
cmVhZCBldmVudCBsb29wLCB0aGlzIHNob3VsZCBub3QgZXZlciBnZXQgY2FsbGVkIHdoaWxlIGNs
b3NpbmcuCisgICAgQVNTRVJUKCFtX2Nsb3NpbmcpOwogICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0g
TWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCAwKTsKIAogICAgIGlmICht
X29ubWVzc2FnZUxpc3RlbmVyLmdldCgpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAppbmRleCBi
ZmRkZWYxLi5jZTc4MmY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTg0LDYgKzg0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBXb3JrZXJHbG9iYWxTY29wZQogICAg
ICAgICBXb3JrZXJDb250ZXh0KiBzZWxmKCkgeyByZXR1cm4gdGhpczsgfQogICAgICAgICBXb3Jr
ZXJMb2NhdGlvbiogbG9jYXRpb24oKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbG9zZSgpOwogCiAg
ICAgICAgIC8vIFdvcmtlclV0aWxzCiAgICAgICAgIHZvaWQgaW1wb3J0U2NyaXB0cyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdXJscywgY29uc3QgU3RyaW5nJiBjYWxsZXJVUkwsIGludCBjYWxsZXJM
aW5lLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xNDIsNiArMTQzLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29ubWVzc2FnZUxpc3RlbmVy
OwogICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOworCisgICAgICAg
IGJvb2wgbV9jbG9zaW5nOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmlkbAppbmRleCBkOTFjNmU3Li42MDU2OGZiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuaWRsCkBAIC00MCw3ICs0MCw3IEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gV29ya2VyQ29udGV4dCBzZWxmOwog
I2VuZGlmCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIFdvcmtlckxv
Y2F0aW9uIGxvY2F0aW9uOwotICAgICAgICAvLyB2b2lkIGNsb3NlKCk7CisgICAgICAgIHZvaWQg
Y2xvc2UoKTsKICAgICAgICAgLy8gICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNs
b3NlOwogICAgICAgICAvLyAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAg
Yi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCmluZGV4IDRiMzQ2NTgu
LjA3ZWU0ZjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94
eS5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcApAQCAt
Mjk2LDYgKzI5Niw3IEBAIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OndvcmtlckNvbnRleHRE
ZXN0cm95ZWRJbnRlcm5hbCgpCiB7CiAgICAgLy8gV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2sg
aXMgYWx3YXlzIHRoZSBsYXN0IHRvIGJlIHBlcmZvcm1lZCwgc28gdGhlIHByb3h5IGlzIG5vdCBu
ZWVkZWQgZm9yIGNvbW11bmljYXRpb24KICAgICAvLyBpbiBlaXRoZXIgc2lkZSBhbnkgbW9yZS4g
SG93ZXZlciwgdGhlIFdvcmtlciBvYmplY3QgbWF5IHN0aWxsIGV4aXN0LCBhbmQgaXQgYXNzdW1l
cyB0aGF0IHRoZSBwcm94eSBleGlzdHMsIHRvby4KKyAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0
cnVlOwogICAgIG1fd29ya2VyVGhyZWFkID0gMDsKICAgICBpZiAoIW1fd29ya2VyT2JqZWN0KQog
ICAgICAgICBkZWxldGUgdGhpczsK
</data>
<flag name="review"
          id="15598"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>