<?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>192855</bug_id>
          
          <creation_ts>2018-12-19 08:26:02 -0800</creation_ts>
          <short_desc>[GTK][WPE] Unify TestController::platformRunUntil() and honor condition flag</short_desc>
          <delta_ts>2018-12-19 15:45:55 -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>Tools / Tests</component>
          <version>Other</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>
          
          <blocked>167941</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrian Perez">aperez</reporter>
          <assigned_to name="Adrian Perez">aperez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1489312</commentid>
    <comment_count>0</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 08:26:02 -0800</bug_when>
    <thetext>Currently the TestController::platformRunUntil(bool&amp;, WTF::Seconds) function
is different for the GTK+ and WPE ports, which does not really make much sense,
and also it&apos;s not honoring the condition flag at all. Ignoring the flag means
that the following can happen:

  1. Some process is started in background which can finish very fast.

  2. The background process finishes and sets the flag to “false”, and calls
     TestController::notifyDone() to stop the event loop.

  3. TestController::platformRunUntil() gets called, and the event loop
     gets started even when the condition was already met.

  4. The event loop is never stopped because ::notifyDone() is not called
     (the early completion already happened), making the test cast timeout.

I have experienced the above scenario about 99% of the time while working
on the content extensions support for the GTK+ and WPE ports, but it could
happen for other kinds of tests as well. I have a strong suspicion that this
may be the cause for the flakyness of some of our tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489320</commentid>
    <comment_count>1</comment_count>
      <attachid>357683</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 08:56:57 -0800</bug_when>
    <thetext>Created attachment 357683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489392</commentid>
    <comment_count>2</comment_count>
      <attachid>357683</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-19 11:59:11 -0800</bug_when>
    <thetext>Comment on attachment 357683
Patch

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

&gt; Tools/WebKitTestRunner/wpe/TestControllerWPE.cpp:77
&gt; +    while (!done)
&gt; +        RunLoop::main().run();

This isn&apos;t right because now the timeout is no longer respected at all; it can run forever if the job never completes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489398</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-19 12:04:54 -0800</bug_when>
    <thetext>I&apos;m not even certain what the expected behavior of this function is. Is it: run the loop until condition becomes true OR the timeout expires? That&apos;s what I&apos;d assume just from looking at the parameters. The problem here is that there&apos;s no way to stop the RunLoop after the condition becomes true before the timeout expires, except by using more smaller timeouts.

Or is it: run the loop until condition becomes true, checking whether condition is true every timeout seconds, guaranteeing that it never returns if condition never becomes true? That&apos;s what you&apos;ve implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489420</commentid>
    <comment_count>4</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 13:05:14 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #2)
&gt; Comment on attachment 357683 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=357683&amp;action=review
&gt; 
&gt; &gt; Tools/WebKitTestRunner/wpe/TestControllerWPE.cpp:77
&gt; &gt; +    while (!done)
&gt; &gt; +        RunLoop::main().run();
&gt; 
&gt; This isn&apos;t right because now the timeout is no longer respected at all; it
&gt; can run forever if the job never completes.

Right, what we need is:

   while (!(done || timedOut))
       RunLoop::main().run();

With “timedOut” being set to “false” when the timeout timer is fired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489422</commentid>
    <comment_count>5</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 13:06:27 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)
&gt; I&apos;m not even certain what the expected behavior of this function is. Is it:
&gt; run the loop until condition becomes true OR the timeout expires? That&apos;s
&gt; what I&apos;d assume just from looking at the parameters. The problem here is
&gt; that there&apos;s no way to stop the RunLoop after the condition becomes true
&gt; before the timeout expires, except by using more smaller timeouts.
&gt; 
&gt; Or is it: run the loop until condition becomes true, checking whether
&gt; condition is true every timeout seconds, guaranteeing that it never returns
&gt; if condition never becomes true? That&apos;s what you&apos;ve implemented.

The run loop is stopped when TimeoutTimer::fired() is invoked, note
that it calls RunLoop::main().stop().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489431</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-19 13:18:30 -0800</bug_when>
    <thetext>(In reply to Adrian Perez from comment #4)
&gt; Right, what we need is:
&gt; 
&gt;    while (!(done || timedOut))
&gt;        RunLoop::main().run();
&gt; 
&gt; With “timedOut” being set to “false” when the timeout timer is fired.

If you make only this change, then the while becomes redundant. You know it has timed out by virtue of having returned from RunLoop::run and you know it doesn&apos;t matter whether done is true or not because the timeout has passed. So you need to use another shorter, internal timeout to wake things up more often.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489438</commentid>
    <comment_count>7</comment_count>
      <attachid>357712</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 13:27:07 -0800</bug_when>
    <thetext>Created attachment 357712
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489478</commentid>
    <comment_count>8</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 14:22:02 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #6)
&gt; (In reply to Adrian Perez from comment #4)
&gt; &gt; Right, what we need is:
&gt; &gt; 
&gt; &gt;    while (!(done || timedOut))
&gt; &gt;        RunLoop::main().run();
&gt; &gt; 
&gt; &gt; With “timedOut” being set to “false” when the timeout timer is fired.
&gt; 
&gt; If you make only this change, then the while becomes redundant. You know it
&gt; has timed out by virtue of having returned from RunLoop::run [...]

Not quite. Returning from RunLoop::run may happen for two reasons:

 1. Time out.
 2. Calling TestController::notifyDone().

From what I see around, the expectation is that the tests using runUntil()
(which internally calls platformRunUntil(), BTW) will always flip the “done”
flag to “true” before calling TestController::notifyDone(). On time out, the
“done” flag won&apos;t be set to “true”.

&gt; [...] and you know it
&gt; doesn&apos;t matter whether done is true or not because the timeout has passed.
&gt; So you need to use another shorter, internal timeout to wake things up more
&gt; often.

I don&apos;t understand this part of your comment. I don&apos;t see how having a timer
that fires at regular short intervals is going to change the two possible
exit conditions I wrote about above.

Trying to explain things in a different way... At the point when
TestController::platformRunUntil(done, timeout) is executed:

  1. If “done” is already “true” → the run loop is never started,
     the function just returns.

  2. Otherwise the loop is entered:

     2.a.) Some external code, usually a callback dispatched by
           the run loop, will set the “done” flag to “true” and
           call TestController::notifyDone() -- which stops the
           run loop.

     2.b.) The operation times out. In this case we want to exit
           the “while(...) RunLoop::main().run()” loop only, so
           the ::fired() timer callback sets “timedOut = false”
           and stops the run loop. The “done” flag is kept
           untouched (hence set still to “false”.

I am 100% sure that v2 of the patch covers these three cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489498</commentid>
    <comment_count>9</comment_count>
      <attachid>357712</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-19 14:48:56 -0800</bug_when>
    <thetext>Comment on attachment 357712
Patch v2

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

OK, you&apos;re right.

&gt; Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:79
&gt; +    while (!(done | timeoutTimer.timedOut))

PROBLEM: you meant to write || here in TestControllerGTK.cpp.

&gt; Tools/WebKitTestRunner/wpe/TestControllerWPE.cpp:82
&gt; +    while (!(done || timeoutTimer.timedOut))

Personally I would write: while (!done &amp;&amp; !timeoutTimer.timedOut). One fewer level of parentheses, a bit easier to read IMO. Up to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489517</commentid>
    <comment_count>10</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 15:13:40 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #9)
&gt; Comment on attachment 357712 [details]
&gt; Patch v2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=357712&amp;action=review
&gt; 
&gt; OK, you&apos;re right.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:79
&gt; &gt; +    while (!(done | timeoutTimer.timedOut))
&gt; 
&gt; PROBLEM: you meant to write || here in TestControllerGTK.cpp.

...aaand this is why we make code reviews, good catch! :)

&gt; &gt; Tools/WebKitTestRunner/wpe/TestControllerWPE.cpp:82
&gt; &gt; +    while (!(done || timeoutTimer.timedOut))
&gt; 
&gt; Personally I would write: while (!done &amp;&amp; !timeoutTimer.timedOut). One fewer
&gt; level of parentheses, a bit easier to read IMO. Up to you.

I always doubt between the two styles, so I&apos;ll go with your option
because “less parens” sounds like a good thing.

I&apos;ll fix these two issued above before landing. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489520</commentid>
    <comment_count>11</comment_count>
      <attachid>357737</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 15:23:21 -0800</bug_when>
    <thetext>Created attachment 357737
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489536</commentid>
    <comment_count>12</comment_count>
      <attachid>357737</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-19 15:44:54 -0800</bug_when>
    <thetext>Comment on attachment 357737
Patch for landing

Clearing flags on attachment: 357737

Committed r239401: &lt;https://trac.webkit.org/changeset/239401&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489537</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-19 15:44:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489539</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-12-19 15:45:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/46855515&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357683</attachid>
            <date>2018-12-19 08:56:57 -0800</date>
            <delta_ts>2018-12-19 13:27:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192855-20181219185656.patch</filename>
            <type>text/plain</type>
            <size>4355</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5Mzc4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWIwMWIxZGE2MzhlNjIxMDdkODQ4MDhkZGQ4MzllNjg4
YjlkNDU2OS4uYTE2YzFjNDU4MTc5ZjBhMmZhZDZiODE2NzZiM2I2NzlhMjJhNjRmYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE4LTEyLTE5ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS11bV1BFXSBVbmlmeSBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1S
dW5VbnRpbCgpIGFuZCBob25vciBjb25kaXRpb24gZmxhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyODU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29u
dHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpub3RpZnlEb25l
KTogVXNlIHRoZSBXUEUgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybVJ1blVudGlsKTogVXNlIHRoZSBXUEUgaW1wbGVtZW50YXRpb24uCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbCk6IEhvbm9yIHRoZSBjb25k
aXRpb24gZmxhZy4KKwogMjAxOC0xMi0xOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBBIGNvcGllZCB0ZXh0IHNlbGVjdGlvbiBpcyBwYXN0
ZWQgYXMgYSB3ZWIgYXJjaGl2ZSBhdHRhY2htZW50IGluIHRoZSBlbnRyeSB2aWV3IGluIE1lc3Nh
Z2VzCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxl
ckd0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5j
cHAKaW5kZXggNGYyZThjNDNhNTNiMGZkOTgxMDMxNTI5OTAyNTRiZDRlZTY4YzM1Mi4uMzhmOTNl
ZTRmOTRhN2I5NDc4ODQ4MGUyMmIwYzRmOGM0YTI2MDY5YyAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcApAQCAtMzcsMjcgKzM3LDggQEAK
IAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBHU291cmNlKiB0aW1lb3V0U291cmNlKCkKLXsK
LSAgICBzdGF0aWMgR1JlZlB0cjxHU291cmNlPiBzb3VyY2UgPSBudWxscHRyOwotICAgIGlmICgh
c291cmNlKSB7Ci0gICAgICAgIHNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25l
dygwKSk7Ci0gICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHNvdXJjZS5nZXQoKSwgLTEp
OwotICAgICAgICBnX3NvdXJjZV9zZXRfbmFtZShzb3VyY2UuZ2V0KCksICJbV1RSXSBUZXN0IHRp
bWVvdXQgc291cmNlIik7Ci0gICAgICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhzb3VyY2UuZ2V0
KCksIFtdKGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7Ci0gICAgICAgICAgICBnX3Nv
dXJjZV9zZXRfcmVhZHlfdGltZShzdGF0aWNfY2FzdDxHU291cmNlKj4odXNlckRhdGEpLCAtMSk7
Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRlc3RDb250cm9sbGVyUnVuTG9v
cCB0aW1lZCBvdXQuXG4iKTsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5zdG9wKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwotICAgICAgICB9LCBzb3VyY2UuZ2V0
KCksIG51bGxwdHIpOwotICAgICAgICBnX3NvdXJjZV9hdHRhY2goc291cmNlLmdldCgpLCBudWxs
cHRyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNvdXJjZS5nZXQoKTsKLX0KLQogdm9pZCBUZXN0Q29u
dHJvbGxlcjo6bm90aWZ5RG9uZSgpCiB7Ci0gICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUodGlt
ZW91dFNvdXJjZSgpLCAtMSk7CiAgICAgUnVuTG9vcDo6bWFpbigpLnN0b3AoKTsKIH0KIApAQCAt
NzQsMTcgKzU1LDI1IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtRGVzdHJveSgpCiB7
CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUnVuVW50aWwoYm9vbCYsIFdURjo6
U2Vjb25kcyB0aW1lb3V0KQordm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbChi
b29sJiBkb25lLCBXVEY6OlNlY29uZHMgdGltZW91dCkKIHsKLSAgICBpZiAodGltZW91dCA+IDBf
cykgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9uIGlzIG5vdyByZXBlYXRlZCBp
biBzZXZlcmFsIHBsYWNlcywgaXQgc2hvdWxkIGJlIG1vdmVkIHRvIGEgY29tbW9uIHBsYWNlIGlu
IFdURiBhbmQgdXNlZCBldmVyeXdoZXJlLgotICAgICAgICBnaW50NjQgY3VycmVudFRpbWUgPSBn
X2dldF9tb25vdG9uaWNfdGltZSgpOwotICAgICAgICBnaW50NjQgdGFyZ2V0VGltZSA9IGN1cnJl
bnRUaW1lICsgc3RkOjptaW48Z2ludDY0PihHX01BWElOVDY0IC0gY3VycmVudFRpbWUsIHRpbWVv
dXQubWljcm9zZWNvbmRzQXM8aW50NjRfdD4oKSk7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRUaW1l
ID49IGN1cnJlbnRUaW1lKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUodGltZW91
dFNvdXJjZSgpLCB0YXJnZXRUaW1lKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ19zb3VyY2Vfc2V0
X3JlYWR5X3RpbWUodGltZW91dFNvdXJjZSgpLCAtMSk7Ci0gICAgUnVuTG9vcDo6bWFpbigpLnJ1
bigpOworICAgIHN0cnVjdCBUaW1lb3V0VGltZXIgeworICAgICAgICBUaW1lb3V0VGltZXIoKQor
ICAgICAgICAgICAgOiB0aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaW1lb3V0VGltZXI6
OmZpcmVkKQorICAgICAgICB7IH0KKworICAgICAgICB2b2lkIGZpcmVkKCkgeyBSdW5Mb29wOjpt
YWluKCkuc3RvcCgpOyB9CisgICAgICAgIFJ1bkxvb3A6OlRpbWVyPFRpbWVvdXRUaW1lcj4gdGlt
ZXI7CisgICAgfSB0aW1lb3V0VGltZXI7CisKKyAgICB0aW1lb3V0VGltZXIudGltZXIuc2V0UHJp
b3JpdHkoR19QUklPUklUWV9ERUZBVUxUX0lETEUpOworICAgIGlmICh0aW1lb3V0ID49IDBfcykK
KyAgICAgICAgdGltZW91dFRpbWVyLnRpbWVyLnN0YXJ0T25lU2hvdCh0aW1lb3V0KTsKKworICAg
IHdoaWxlICghZG9uZSkKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLnJ1bigpOworCisgICAgdGlt
ZW91dFRpbWVyLnRpbWVyLnN0b3AoKTsKIH0KIAogc3RhdGljIGNoYXIqIGdldEVudmlyb25tZW50
VmFyaWFibGVBc1VURjhTdHJpbmcoY29uc3QgY2hhciogdmFyaWFibGVOYW1lKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCmluZGV4IGZlMzBk
M2RlODU1MjU3NWE4NmZlZTZhNDU4N2I0NTM1NGIxOGVkNWMuLjRiNTcyYjZiMTNlYTY4MjUyYTYx
YTAzMmU3MzFmN2NkOWFjYmY3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
d3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3dw
ZS9UZXN0Q29udHJvbGxlcldQRS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCgpCiB7CiB9CiAKLXZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtUnVuVW50aWwoYm9vbCYgY29uZGl0aW9uLCBXVEY6OlNlY29uZHMgdGlt
ZW91dCkKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUnVuVW50aWwoYm9vbCYgZG9uZSwg
V1RGOjpTZWNvbmRzIHRpbWVvdXQpCiB7CiAgICAgc3RydWN0IFRpbWVvdXRUaW1lciB7CiAgICAg
ICAgIFRpbWVvdXRUaW1lcigpCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUnVuVW50aWwoYm9vbCYgY29uZGl0aW9uLCBXVEY6OlNlY29uZHMgdGltZW91dCkK
ICAgICBpZiAodGltZW91dCA+PSAwX3MpCiAgICAgICAgIHRpbWVvdXRUaW1lci50aW1lci5zdGFy
dE9uZVNob3QodGltZW91dCk7CiAKLSAgICBSdW5Mb29wOjptYWluKCkucnVuKCk7CisgICAgd2hp
bGUgKCFkb25lKQorICAgICAgICBSdW5Mb29wOjptYWluKCkucnVuKCk7CiAKICAgICB0aW1lb3V0
VGltZXIudGltZXIuc3RvcCgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357712</attachid>
            <date>2018-12-19 13:27:07 -0800</date>
            <delta_ts>2018-12-19 15:23:16 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-192855-20181219232705.patch</filename>
            <type>text/plain</type>
            <size>4768</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5Mzg0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjlmYjc0NGM2ZDljZWE2NGFmYWFjMjFmZjk1YTkxMGUz
M2JkN2Y0Zi4uNDBmOTliMGMzMTEwNWNkMGZjYjJlZmVkMTllZWQ1YmVjYWViMTdjMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE4LTEyLTE5ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS11bV1BFXSBVbmlmeSBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1S
dW5VbnRpbCgpIGFuZCBob25vciBjb25kaXRpb24gZmxhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyODU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29u
dHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpub3RpZnlEb25l
KTogVXNlIHRoZSBXUEUgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybVJ1blVudGlsKTogVXNlIHRoZSBXUEUgaW1wbGVtZW50YXRpb24uCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbCk6IEhvbm9yIHRoZSBjb25k
aXRpb24gZmxhZy4KKwogMjAxOC0xMi0xOSAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGNsaWVudHMgdG8gc2V0IHRoZSBuYXZpZ2F0b3Ig
cGxhdGZvcm0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250
cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVy
R3RrLmNwcAppbmRleCA0ZjJlOGM0M2E1M2IwZmQ5ODEwMzE1Mjk5MDI1NGJkNGVlNjhjMzUyLi41
YjIwMTBlYTEyZTdmMjkzNjUwNDI4YjI0NzJjN2EzMDRmMWZmODA4IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC0zNywyNyArMzcs
OCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIEdTb3VyY2UqIHRpbWVvdXRTb3VyY2Uo
KQotewotICAgIHN0YXRpYyBHUmVmUHRyPEdTb3VyY2U+IHNvdXJjZSA9IG51bGxwdHI7Ci0gICAg
aWYgKCFzb3VyY2UpIHsKLSAgICAgICAgc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3Vy
Y2VfbmV3KDApKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoc291cmNlLmdldCgp
LCAtMSk7Ci0gICAgICAgIGdfc291cmNlX3NldF9uYW1lKHNvdXJjZS5nZXQoKSwgIltXVFJdIFRl
c3QgdGltZW91dCBzb3VyY2UiKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNvdXJj
ZS5nZXQoKSwgW10oZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKLSAgICAgICAgICAg
IGdfc291cmNlX3NldF9yZWFkeV90aW1lKHN0YXRpY19jYXN0PEdTb3VyY2UqPih1c2VyRGF0YSks
IC0xKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRkFJTDogVGVzdENvbnRyb2xsZXJS
dW5Mb29wIHRpbWVkIG91dC5cbiIpOwotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLnN0b3Ao
KTsKLSAgICAgICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gICAgICAgIH0sIHNvdXJj
ZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UuZ2V0KCks
IG51bGxwdHIpOwotICAgIH0KLSAgICByZXR1cm4gc291cmNlLmdldCgpOwotfQotCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKIHsKLSAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGlt
ZSh0aW1lb3V0U291cmNlKCksIC0xKTsKICAgICBSdW5Mb29wOjptYWluKCkuc3RvcCgpOwogfQog
CkBAIC03NCwxNyArNTUsMzEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0cm95
KCkKIHsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbChib29sJiwg
V1RGOjpTZWNvbmRzIHRpbWVvdXQpCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1blVu
dGlsKGJvb2wmIGRvbmUsIFdURjo6U2Vjb25kcyB0aW1lb3V0KQogewotICAgIGlmICh0aW1lb3V0
ID4gMF9zKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gaXMgbm93IHJlcGVh
dGVkIGluIHNldmVyYWwgcGxhY2VzLCBpdCBzaG91bGQgYmUgbW92ZWQgdG8gYSBjb21tb24gcGxh
Y2UgaW4gV1RGIGFuZCB1c2VkIGV2ZXJ5d2hlcmUuCi0gICAgICAgIGdpbnQ2NCBjdXJyZW50VGlt
ZSA9IGdfZ2V0X21vbm90b25pY190aW1lKCk7Ci0gICAgICAgIGdpbnQ2NCB0YXJnZXRUaW1lID0g
Y3VycmVudFRpbWUgKyBzdGQ6Om1pbjxnaW50NjQ+KEdfTUFYSU5UNjQgLSBjdXJyZW50VGltZSwg
dGltZW91dC5taWNyb3NlY29uZHNBczxpbnQ2NF90PigpKTsKLSAgICAgICAgQVNTRVJUKHRhcmdl
dFRpbWUgPj0gY3VycmVudFRpbWUpOwotICAgICAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZSh0
aW1lb3V0U291cmNlKCksIHRhcmdldFRpbWUpOwotICAgIH0gZWxzZQotICAgICAgICBnX3NvdXJj
ZV9zZXRfcmVhZHlfdGltZSh0aW1lb3V0U291cmNlKCksIC0xKTsKLSAgICBSdW5Mb29wOjptYWlu
KCkucnVuKCk7CisgICAgc3RydWN0IFRpbWVvdXRUaW1lciB7CisgICAgICAgIFRpbWVvdXRUaW1l
cigpCisgICAgICAgICAgICA6IHRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbWVvdXRU
aW1lcjo6ZmlyZWQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZvaWQgZmlyZWQoKQorICAgICAg
ICB7CisgICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7CisgICAgICAgICAgICBSdW5Mb29wOjpt
YWluKCkuc3RvcCgpOworICAgICAgICB9CisKKyAgICAgICAgUnVuTG9vcDo6VGltZXI8VGltZW91
dFRpbWVyPiB0aW1lcjsKKyAgICAgICAgYm9vbCB0aW1lZE91dCB7IGZhbHNlIH07CisgICAgfSB0
aW1lb3V0VGltZXI7CisKKyAgICB0aW1lb3V0VGltZXIudGltZXIuc2V0UHJpb3JpdHkoR19QUklP
UklUWV9ERUZBVUxUX0lETEUpOworICAgIGlmICh0aW1lb3V0ID49IDBfcykKKyAgICAgICAgdGlt
ZW91dFRpbWVyLnRpbWVyLnN0YXJ0T25lU2hvdCh0aW1lb3V0KTsKKworICAgIHdoaWxlICghKGRv
bmUgfCB0aW1lb3V0VGltZXIudGltZWRPdXQpKQorICAgICAgICBSdW5Mb29wOjptYWluKCkucnVu
KCk7CisKKyAgICB0aW1lb3V0VGltZXIudGltZXIuc3RvcCgpOwogfQogCiBzdGF0aWMgY2hhciog
Z2V0RW52aXJvbm1lbnRWYXJpYWJsZUFzVVRGOFN0cmluZyhjb25zdCBjaGFyKiB2YXJpYWJsZU5h
bWUpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxl
cldQRS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5j
cHAKaW5kZXggZmUzMGQzZGU4NTUyNTc1YTg2ZmVlNmE0NTg3YjQ1MzU0YjE4ZWQ1Yy4uNTNiODhk
MDc4ZjliOWIwNGMwYjRjMjk0MmU4OWVhNDRjMTdhNWJkOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcApAQCAtNTgsMjIgKzU4LDI5IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQogewogfQog
Ci12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1blVudGlsKGJvb2wmIGNvbmRpdGlvbiwg
V1RGOjpTZWNvbmRzIHRpbWVvdXQpCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1blVu
dGlsKGJvb2wmIGRvbmUsIFdURjo6U2Vjb25kcyB0aW1lb3V0KQogewogICAgIHN0cnVjdCBUaW1l
b3V0VGltZXIgewogICAgICAgICBUaW1lb3V0VGltZXIoKQogICAgICAgICAgICAgOiB0aW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZUaW1lb3V0VGltZXI6OmZpcmVkKQogICAgICAgICB7IH0K
IAotICAgICAgICB2b2lkIGZpcmVkKCkgeyBSdW5Mb29wOjptYWluKCkuc3RvcCgpOyB9CisgICAg
ICAgIHZvaWQgZmlyZWQoKQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7
CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuc3RvcCgpOworICAgICAgICB9CisKICAgICAg
ICAgUnVuTG9vcDo6VGltZXI8VGltZW91dFRpbWVyPiB0aW1lcjsKKyAgICAgICAgYm9vbCB0aW1l
ZE91dCB7IGZhbHNlIH07CiAgICAgfSB0aW1lb3V0VGltZXI7CiAKICAgICB0aW1lb3V0VGltZXIu
dGltZXIuc2V0UHJpb3JpdHkoR19QUklPUklUWV9ERUZBVUxUX0lETEUpOwogICAgIGlmICh0aW1l
b3V0ID49IDBfcykKICAgICAgICAgdGltZW91dFRpbWVyLnRpbWVyLnN0YXJ0T25lU2hvdCh0aW1l
b3V0KTsKIAotICAgIFJ1bkxvb3A6Om1haW4oKS5ydW4oKTsKKyAgICB3aGlsZSAoIShkb25lIHx8
IHRpbWVvdXRUaW1lci50aW1lZE91dCkpCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5ydW4oKTsK
IAogICAgIHRpbWVvdXRUaW1lci50aW1lci5zdG9wKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357737</attachid>
            <date>2018-12-19 15:23:21 -0800</date>
            <delta_ts>2018-12-19 15:44:54 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-192855-20181220012320.patch</filename>
            <type>text/plain</type>
            <size>4770</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5Mzk2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjlmYjc0NGM2ZDljZWE2NGFmYWFjMjFmZjk1YTkxMGUz
M2JkN2Y0Zi4uMzNkNDZhYTFlNDhkNDA3ZDBiN2M0NDY4OWQ5NGQ0ODc3ZWIzMDY2NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE4LTEyLTE5ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS11bV1BFXSBVbmlmeSBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1S
dW5VbnRpbCgpIGFuZCBob25vciBjb25kaXRpb24gZmxhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyODU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
TWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0
Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpub3RpZnlE
b25lKTogVXNlIHRoZSBXUEUgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybVJ1blVudGlsKTogVXNlIHRoZSBXUEUgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbCk6IEhvbm9yIHRoZSBj
b25kaXRpb24gZmxhZy4KKwogMjAxOC0xMi0xOSAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRu
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGNsaWVudHMgdG8gc2V0IHRoZSBuYXZpZ2F0
b3IgcGxhdGZvcm0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RD
b250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9s
bGVyR3RrLmNwcAppbmRleCA0ZjJlOGM0M2E1M2IwZmQ5ODEwMzE1Mjk5MDI1NGJkNGVlNjhjMzUy
Li5hYTMzZDM5OTZmN2Y5YTE0NmU1NjEwNWU5NDAzMGQ1NDE2NGQxMGZlIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC0zNywyNyAr
MzcsOCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIEdTb3VyY2UqIHRpbWVvdXRTb3Vy
Y2UoKQotewotICAgIHN0YXRpYyBHUmVmUHRyPEdTb3VyY2U+IHNvdXJjZSA9IG51bGxwdHI7Ci0g
ICAgaWYgKCFzb3VyY2UpIHsKLSAgICAgICAgc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9z
b3VyY2VfbmV3KDApKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoc291cmNlLmdl
dCgpLCAtMSk7Ci0gICAgICAgIGdfc291cmNlX3NldF9uYW1lKHNvdXJjZS5nZXQoKSwgIltXVFJd
IFRlc3QgdGltZW91dCBzb3VyY2UiKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNv
dXJjZS5nZXQoKSwgW10oZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKLSAgICAgICAg
ICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHN0YXRpY19jYXN0PEdTb3VyY2UqPih1c2VyRGF0
YSksIC0xKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRkFJTDogVGVzdENvbnRyb2xs
ZXJSdW5Mb29wIHRpbWVkIG91dC5cbiIpOwotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLnN0
b3AoKTsKLSAgICAgICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gICAgICAgIH0sIHNv
dXJjZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UuZ2V0
KCksIG51bGxwdHIpOwotICAgIH0KLSAgICByZXR1cm4gc291cmNlLmdldCgpOwotfQotCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKIHsKLSAgICBnX3NvdXJjZV9zZXRfcmVhZHlf
dGltZSh0aW1lb3V0U291cmNlKCksIC0xKTsKICAgICBSdW5Mb29wOjptYWluKCkuc3RvcCgpOwog
fQogCkBAIC03NCwxNyArNTUsMzEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0
cm95KCkKIHsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbChib29s
JiwgV1RGOjpTZWNvbmRzIHRpbWVvdXQpCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1
blVudGlsKGJvb2wmIGRvbmUsIFdURjo6U2Vjb25kcyB0aW1lb3V0KQogewotICAgIGlmICh0aW1l
b3V0ID4gMF9zKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gaXMgbm93IHJl
cGVhdGVkIGluIHNldmVyYWwgcGxhY2VzLCBpdCBzaG91bGQgYmUgbW92ZWQgdG8gYSBjb21tb24g
cGxhY2UgaW4gV1RGIGFuZCB1c2VkIGV2ZXJ5d2hlcmUuCi0gICAgICAgIGdpbnQ2NCBjdXJyZW50
VGltZSA9IGdfZ2V0X21vbm90b25pY190aW1lKCk7Ci0gICAgICAgIGdpbnQ2NCB0YXJnZXRUaW1l
ID0gY3VycmVudFRpbWUgKyBzdGQ6Om1pbjxnaW50NjQ+KEdfTUFYSU5UNjQgLSBjdXJyZW50VGlt
ZSwgdGltZW91dC5taWNyb3NlY29uZHNBczxpbnQ2NF90PigpKTsKLSAgICAgICAgQVNTRVJUKHRh
cmdldFRpbWUgPj0gY3VycmVudFRpbWUpOwotICAgICAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGlt
ZSh0aW1lb3V0U291cmNlKCksIHRhcmdldFRpbWUpOwotICAgIH0gZWxzZQotICAgICAgICBnX3Nv
dXJjZV9zZXRfcmVhZHlfdGltZSh0aW1lb3V0U291cmNlKCksIC0xKTsKLSAgICBSdW5Mb29wOjpt
YWluKCkucnVuKCk7CisgICAgc3RydWN0IFRpbWVvdXRUaW1lciB7CisgICAgICAgIFRpbWVvdXRU
aW1lcigpCisgICAgICAgICAgICA6IHRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbWVv
dXRUaW1lcjo6ZmlyZWQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZvaWQgZmlyZWQoKQorICAg
ICAgICB7CisgICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7CisgICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuc3RvcCgpOworICAgICAgICB9CisKKyAgICAgICAgUnVuTG9vcDo6VGltZXI8VGlt
ZW91dFRpbWVyPiB0aW1lcjsKKyAgICAgICAgYm9vbCB0aW1lZE91dCB7IGZhbHNlIH07CisgICAg
fSB0aW1lb3V0VGltZXI7CisKKyAgICB0aW1lb3V0VGltZXIudGltZXIuc2V0UHJpb3JpdHkoR19Q
UklPUklUWV9ERUZBVUxUX0lETEUpOworICAgIGlmICh0aW1lb3V0ID49IDBfcykKKyAgICAgICAg
dGltZW91dFRpbWVyLnRpbWVyLnN0YXJ0T25lU2hvdCh0aW1lb3V0KTsKKworICAgIHdoaWxlICgh
ZG9uZSAmJiAhdGltZW91dFRpbWVyLnRpbWVkT3V0KQorICAgICAgICBSdW5Mb29wOjptYWluKCku
cnVuKCk7CisKKyAgICB0aW1lb3V0VGltZXIudGltZXIuc3RvcCgpOwogfQogCiBzdGF0aWMgY2hh
ciogZ2V0RW52aXJvbm1lbnRWYXJpYWJsZUFzVVRGOFN0cmluZyhjb25zdCBjaGFyKiB2YXJpYWJs
ZU5hbWUpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJv
bGxlcldQRS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQ
RS5jcHAKaW5kZXggZmUzMGQzZGU4NTUyNTc1YTg2ZmVlNmE0NTg3YjQ1MzU0YjE4ZWQ1Yy4uY2Iy
YTk5ZWM5YzgxYzVhNWFkM2JkZGMwZmVkMmE0NDY3YWU4MzlmNSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcApAQCAtNTgsMjIgKzU4LDI5
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQogewog
fQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1blVudGlsKGJvb2wmIGNvbmRpdGlv
biwgV1RGOjpTZWNvbmRzIHRpbWVvdXQpCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1
blVudGlsKGJvb2wmIGRvbmUsIFdURjo6U2Vjb25kcyB0aW1lb3V0KQogewogICAgIHN0cnVjdCBU
aW1lb3V0VGltZXIgewogICAgICAgICBUaW1lb3V0VGltZXIoKQogICAgICAgICAgICAgOiB0aW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaW1lb3V0VGltZXI6OmZpcmVkKQogICAgICAgICB7
IH0KIAotICAgICAgICB2b2lkIGZpcmVkKCkgeyBSdW5Mb29wOjptYWluKCkuc3RvcCgpOyB9Cisg
ICAgICAgIHZvaWQgZmlyZWQoKQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lZE91dCA9IHRy
dWU7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuc3RvcCgpOworICAgICAgICB9CisKICAg
ICAgICAgUnVuTG9vcDo6VGltZXI8VGltZW91dFRpbWVyPiB0aW1lcjsKKyAgICAgICAgYm9vbCB0
aW1lZE91dCB7IGZhbHNlIH07CiAgICAgfSB0aW1lb3V0VGltZXI7CiAKICAgICB0aW1lb3V0VGlt
ZXIudGltZXIuc2V0UHJpb3JpdHkoR19QUklPUklUWV9ERUZBVUxUX0lETEUpOwogICAgIGlmICh0
aW1lb3V0ID49IDBfcykKICAgICAgICAgdGltZW91dFRpbWVyLnRpbWVyLnN0YXJ0T25lU2hvdCh0
aW1lb3V0KTsKIAotICAgIFJ1bkxvb3A6Om1haW4oKS5ydW4oKTsKKyAgICB3aGlsZSAoIWRvbmUg
JiYgIXRpbWVvdXRUaW1lci50aW1lZE91dCkKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLnJ1bigp
OwogCiAgICAgdGltZW91dFRpbWVyLnRpbWVyLnN0b3AoKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>