<?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>171119</bug_id>
          
          <creation_ts>2017-04-21 10:36:09 -0700</creation_ts>
          <short_desc>ASSERTION FAILED: m_table seen with workers/wasm-hashset LayoutTests</short_desc>
          <delta_ts>2017-04-24 14:11:49 -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>New Bugs</component>
          <version>WebKit 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="Ryan Haddad">ryanhaddad</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1299682</commentid>
    <comment_count>0</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-04-21 10:36:09 -0700</bug_when>
    <thetext>ASSERTION FAILED: m_table
/Volumes/Data/slave/sierra-debug/build/WebKitBuild/Debug/usr/local/include/wtf/HashTable.h(212) : void WTF::HashTableConstIterator&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, WTF::IdentityExtractor, WTF::PtrHash&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt; &gt;::checkValidity() const [Key = WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, Value = WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, Extractor = WTF::IdentityExtractor, HashFunctions = WTF::PtrHash&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, Traits = WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, KeyTraits = WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;]
1   0x103e7644d WTFCrash
2   0x1034f1f07 WTF::HashTableConstIterator&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, WTF::IdentityExtractor, WTF::PtrHash&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt; &gt;::checkValidity() const
3   0x1034f1e59 WTF::HashTableConstIterator&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, WTF::IdentityExtractor, WTF::PtrHash&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt; &gt;::operator++()
4   0x1034f03e3 WTF::HashTableConstIteratorAdapter&lt;WTF::HashTable&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;, WTF::IdentityExtractor, WTF::PtrHash&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt; &gt;, WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt;::operator++()
5   0x1034f0266 JSC::JSRunLoopTimer::scheduleTimer(WTF::Seconds)
6   0x103be7094 JSC::PromiseDeferredTimer::scheduleWorkSoon(JSC::JSPromiseDeferred*, std::__1::function&lt;void ()&gt;&amp;&amp;)
7   0x103dd5b17 JSC::webAssemblyCompileFunc(JSC::ExecState*)::$_0::operator()(JSC::VM&amp;, WTF::Expected&lt;WTF::RefPtr&lt;JSC::Wasm::Module&gt;, WTF::String&gt;&amp;&amp;)
8   0x103dd5994 WTF::SharedTaskFunctor&lt;void (JSC::VM&amp;, WTF::Expected&lt;WTF::RefPtr&lt;JSC::Wasm::Module&gt;, WTF::String&gt;&amp;&amp;), JSC::webAssemblyCompileFunc(JSC::ExecState*)::$_0&gt;::run(JSC::VM&amp;, WTF::Expected&lt;WTF::RefPtr&lt;JSC::Wasm::Module&gt;, WTF::String&gt;&amp;&amp;)
9   0x10350573d JSC::Wasm::makeValidationCallback(WTF::RefPtr&lt;WTF::SharedTask&lt;void (JSC::VM&amp;, WTF::Expected&lt;WTF::RefPtr&lt;JSC::Wasm::Module&gt;, WTF::String&gt;&amp;&amp;)&gt; &gt;&amp;&amp;)::$_0::operator()(JSC::VM&amp;, JSC::Wasm::Plan&amp;) const
10  0x103505614 WTF::SharedTaskFunctor&lt;void (JSC::VM&amp;, JSC::Wasm::Plan&amp;), JSC::Wasm::makeValidationCallback(WTF::RefPtr&lt;WTF::SharedTask&lt;void (JSC::VM&amp;, WTF::Expected&lt;WTF::RefPtr&lt;JSC::Wasm::Module&gt;, WTF::String&gt;&amp;&amp;)&gt; &gt;&amp;&amp;)::$_0&gt;::run(JSC::VM&amp;, JSC::Wasm::Plan&amp;)
11  0x103d8890b JSC::Wasm::Plan::complete(WTF::AbstractLocker const&amp;)
12  0x103d89023 JSC::Wasm::Plan::parseAndValidateModule()
13  0x102d8d35d JSC::Wasm::Worklist::Thread::work()
14  0x103e84817 WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0::operator()() const
15  0x103e845bd void std::__1::__invoke_void_return_wrapper&lt;void&gt;::__call&lt;WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0&amp;&gt;(WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0&amp;&amp;&amp;)
16  0x103e84359 std::__1::__function::__func&lt;WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0, std::__1::allocator&lt;WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0&gt;, void ()&gt;::operator()()
17  0x10339172a std::__1::function&lt;void ()&gt;::operator()() const
18  0x103eeb1e7 WTF::threadEntryPoint(void*)
19  0x103eed292 WTF::wtfThreadEntryPoint(void*)
20  0x7fffb3d089af _pthread_body
21  0x7fffb3d088fb _pthread_body
22  0x7fffb3d08101 thread_start

https://build.webkit.org/results/Apple%20Sierra%20Debug%20WK1%20(Tests)/r215598%20(702)/results.html

https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=workers%2Fwasm-hashset</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299683</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-04-21 10:36:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/31760635&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299727</commentid>
    <comment_count>2</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-04-21 11:35:23 -0700</bug_when>
    <thetext>These tests were added with http://trac.webkit.org/changeset/215353</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299784</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-21 12:56:22 -0700</bug_when>
    <thetext>This looks interesting. My only guess is accesses to the hashtable are racy. Trying to figure out how that could happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299787</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-21 12:58:51 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; This looks interesting. My only guess is accesses to the hashtable are racy.
&gt; Trying to figure out how that could happen.

Actually this seems fairly obvious: wasm code finishes compiling at arbitrary times, which could cause it to schedule a timer. Scheduling a timer will cause it to add to the hashmap. However, we might be adding/removing our callback from the hashmap as this happens in the worker run loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300394</commentid>
    <comment_count>5</comment_count>
      <attachid>307947</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-23 19:16:55 -0700</bug_when>
    <thetext>Created attachment 307947
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300395</commentid>
    <comment_count>6</comment_count>
      <attachid>307947</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-23 19:19:53 -0700</bug_when>
    <thetext>Comment on attachment 307947
patch

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

&gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:109
&gt; +    auto locker = holdLock(m_timerCallbacksLock);
&gt;      for (auto&amp; task : m_timerSetCallbacks)
&gt;          task-&gt;run();

Are we sure that the tasks are safe to run while holding this lock?

Would it be possible to do this instead:

Vector&lt;Thingy&gt; tasks;
{
    auto locker = holdLock(m_timerCallbacksLock);
    for (auto&amp; task : m_timerSetCallbacks)
        tasks.append(task);
}
for (auto&amp; task : tasks)
    task-&gt;run();

If a task can run arbitrary JS, then you definitely must do this, since arbitary JS may do something that wants to graph the timerCallbacksLock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300397</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-23 19:24:26 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #6)
&gt; Comment on attachment 307947 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=307947&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:109
&gt; &gt; +    auto locker = holdLock(m_timerCallbacksLock);
&gt; &gt;      for (auto&amp; task : m_timerSetCallbacks)
&gt; &gt;          task-&gt;run();
&gt; 
&gt; Are we sure that the tasks are safe to run while holding this lock?
&gt; 
&gt; Would it be possible to do this instead:
&gt; 
&gt; Vector&lt;Thingy&gt; tasks;
&gt; {
&gt;     auto locker = holdLock(m_timerCallbacksLock);
&gt;     for (auto&amp; task : m_timerSetCallbacks)
&gt;         tasks.append(task);
&gt; }
&gt; for (auto&amp; task : tasks)
&gt;     task-&gt;run();
&gt; 
&gt; If a task can run arbitrary JS, then you definitely must do this, since
&gt; arbitary JS may do something that wants to graph the timerCallbacksLock.

The tasks are not used to run arbitrary JS at the moment. Currently, the only use of this API is inside WorkerRunLoop. The notification is used to notify the WorkerRunLoop that it needs to loop around to ensure it has a proper time out.

When writing the patch, I thought about doing your exact suggestion, but thought it was overkill since we don&apos;t need it right now. Perhaps it&apos;s worth doing it just to future proof ourselves from the foot gun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300398</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-23 19:29:29 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #7)
&gt; (In reply to Filip Pizlo from comment #6)
&gt; &gt; Comment on attachment 307947 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=307947&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:109
&gt; &gt; &gt; +    auto locker = holdLock(m_timerCallbacksLock);
&gt; &gt; &gt;      for (auto&amp; task : m_timerSetCallbacks)
&gt; &gt; &gt;          task-&gt;run();
&gt; &gt; 
&gt; &gt; Are we sure that the tasks are safe to run while holding this lock?
&gt; &gt; 
&gt; &gt; Would it be possible to do this instead:
&gt; &gt; 
&gt; &gt; Vector&lt;Thingy&gt; tasks;
&gt; &gt; {
&gt; &gt;     auto locker = holdLock(m_timerCallbacksLock);
&gt; &gt;     for (auto&amp; task : m_timerSetCallbacks)
&gt; &gt;         tasks.append(task);
&gt; &gt; }
&gt; &gt; for (auto&amp; task : tasks)
&gt; &gt;     task-&gt;run();
&gt; &gt; 
&gt; &gt; If a task can run arbitrary JS, then you definitely must do this, since
&gt; &gt; arbitary JS may do something that wants to graph the timerCallbacksLock.
&gt; 
&gt; The tasks are not used to run arbitrary JS at the moment. Currently, the
&gt; only use of this API is inside WorkerRunLoop. The notification is used to
&gt; notify the WorkerRunLoop that it needs to loop around to ensure it has a
&gt; proper time out.
&gt; 
&gt; When writing the patch, I thought about doing your exact suggestion, but
&gt; thought it was overkill since we don&apos;t need it right now. Perhaps it&apos;s worth
&gt; doing it just to future proof ourselves from the foot gun.

Actually, this brings up a weird corner case:
you can ask for your callback to be removed, but it could run after removal. I&apos;m not sure which semantics we prefer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300399</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-23 19:30:29 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #8)
&gt; (In reply to Saam Barati from comment #7)
&gt; &gt; (In reply to Filip Pizlo from comment #6)
&gt; &gt; &gt; Comment on attachment 307947 [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=307947&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:109
&gt; &gt; &gt; &gt; +    auto locker = holdLock(m_timerCallbacksLock);
&gt; &gt; &gt; &gt;      for (auto&amp; task : m_timerSetCallbacks)
&gt; &gt; &gt; &gt;          task-&gt;run();
&gt; &gt; &gt; 
&gt; &gt; &gt; Are we sure that the tasks are safe to run while holding this lock?
&gt; &gt; &gt; 
&gt; &gt; &gt; Would it be possible to do this instead:
&gt; &gt; &gt; 
&gt; &gt; &gt; Vector&lt;Thingy&gt; tasks;
&gt; &gt; &gt; {
&gt; &gt; &gt;     auto locker = holdLock(m_timerCallbacksLock);
&gt; &gt; &gt;     for (auto&amp; task : m_timerSetCallbacks)
&gt; &gt; &gt;         tasks.append(task);
&gt; &gt; &gt; }
&gt; &gt; &gt; for (auto&amp; task : tasks)
&gt; &gt; &gt;     task-&gt;run();
&gt; &gt; &gt; 
&gt; &gt; &gt; If a task can run arbitrary JS, then you definitely must do this, since
&gt; &gt; &gt; arbitary JS may do something that wants to graph the timerCallbacksLock.
&gt; &gt; 
&gt; &gt; The tasks are not used to run arbitrary JS at the moment. Currently, the
&gt; &gt; only use of this API is inside WorkerRunLoop. The notification is used to
&gt; &gt; notify the WorkerRunLoop that it needs to loop around to ensure it has a
&gt; &gt; proper time out.
&gt; &gt; 
&gt; &gt; When writing the patch, I thought about doing your exact suggestion, but
&gt; &gt; thought it was overkill since we don&apos;t need it right now. Perhaps it&apos;s worth
&gt; &gt; doing it just to future proof ourselves from the foot gun.
&gt; 
&gt; Actually, this brings up a weird corner case:
&gt; you can ask for your callback to be removed, but it could run after removal.
&gt; I&apos;m not sure which semantics we prefer.

OK - I don&apos;t want to overengineer it either.  Seems like it might not be so helpful to do the snapshot vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300639</commentid>
    <comment_count>10</comment_count>
      <attachid>307947</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-24 13:29:06 -0700</bug_when>
    <thetext>Comment on attachment 307947
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300656</commentid>
    <comment_count>11</comment_count>
      <attachid>307947</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-24 14:11:47 -0700</bug_when>
    <thetext>Comment on attachment 307947
patch

Clearing flags on attachment: 307947

Committed r215694: &lt;http://trac.webkit.org/changeset/215694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300657</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-24 14:11:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307947</attachid>
            <date>2017-04-23 19:16:55 -0700</date>
            <delta_ts>2017-04-24 14:11:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>3442</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1Njc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE3LTA0LTIzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFTU0VSVElPTiBGQUlMRUQ6IG1fdGFibGUgc2VlbiB3aXRoIHdvcmtlcnMvd2FzbS1oYXNoc2V0
IExheW91dFRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzExMTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNzYwNjM1PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBIYXNoU2V0IG9mIHRp
bWVyIHNldCBub3RpZmljYXRpb24gY2FsbGJhY2tzIGNhbiBiZSBhY2Nlc3NlZAorICAgICAgICBh
bmQgYXVnbWVudGVkIHNpbXVsdGFuZW91c2x5IGZyb20gZGlmZmVyZW50IHRocmVhZHMuIGUuZywg
dGhlIHdvcmtlcgorICAgICAgICB0aHJlYWQgY2FuIGF1Z21lbnQgaXQgd2hpbGUgdGhlIHdhc20g
Y29tcGlsYXRpb24gdGhyZWFkIHdpbGwKKyAgICAgICAgYWNjZXNzIGl0LiBUaGVyZWZvcmUsIGFj
Y2Vzc2VzIG11c3QgYmUgZ3VhcmRlZCBieSBhIGxvY2suCisKKyAgICAgICAgKiBydW50aW1lL0pT
UnVuTG9vcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OnNjaGVkdWxl
VGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6YWRkVGltZXJTZXROb3RpZmlj
YXRpb24pOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6cmVtb3ZlVGltZXJTZXROb3Rp
ZmljYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuaDoKKwogMjAxNy0w
NC0yMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIHRl
c3QyNjI6IHRlc3QyNjIvdGVzdC9idWlsdC1pbnMvTnVtYmVyL3Byb3RvdHlwZS90b1ByZWNpc2lv
bi9uYW4uanMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1
bkxvb3BUaW1lci5jcHAJKHJldmlzaW9uIDIxNTY2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEw
NCw3IEBAIHZvaWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGltZXIoU2Vjb24KIHsKICAgICBD
RlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGlt
ZUdldEN1cnJlbnQoKSArIGludGVydmFsSW5TZWNvbmRzLnNlY29uZHMoKSk7CiAgICAgbV9pc1Nj
aGVkdWxlZCA9IHRydWU7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3RpbWVyQ2FsbGJh
Y2tzTG9jayk7CiAgICAgZm9yIChhdXRvJiB0YXNrIDogbV90aW1lclNldENhbGxiYWNrcykKICAg
ICAgICAgdGFzay0+cnVuKCk7CiB9CkBAIC0xNDIsNiArMTQzLDggQEAgdm9pZCBKU1J1bkxvb3BU
aW1lcjo6c2NoZWR1bGVUaW1lcihTZWNvbgogewogICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGlu
dGVydmFsSW5TZWNvbmRzKTsKICAgICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKKworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV90aW1lckNhbGxiYWNrc0xvY2spOwogICAgIGZvciAoYXV0byYg
dGFzayA6IG1fdGltZXJTZXRDYWxsYmFja3MpCiAgICAgICAgIHRhc2stPnJ1bigpOwogfQpAQCAt
MTU2LDExICsxNTksMTMgQEAgdm9pZCBKU1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIoKQogCiB2
b2lkIEpTUnVuTG9vcFRpbWVyOjphZGRUaW1lclNldE5vdGlmaWNhdGlvbihUaW1lck5vdGlmaWNh
dGlvbkNhbGxiYWNrIGNhbGxiYWNrKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV90
aW1lckNhbGxiYWNrc0xvY2spOwogICAgIG1fdGltZXJTZXRDYWxsYmFja3MuYWRkKGNhbGxiYWNr
KTsKIH0KIAogdm9pZCBKU1J1bkxvb3BUaW1lcjo6cmVtb3ZlVGltZXJTZXROb3RpZmljYXRpb24o
VGltZXJOb3RpZmljYXRpb25DYWxsYmFjayBjYWxsYmFjaykKIHsKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fdGltZXJDYWxsYmFja3NMb2NrKTsKICAgICBtX3RpbWVyU2V0Q2FsbGJhY2tz
LnJlbW92ZShjYWxsYmFjayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUnVuTG9vcFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaAkocmV2aXNpb24gMjE1NjYyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNiArNjIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY2FuY2VsVGltZXIoKTsKICAgICBib29s
IGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NjaGVkdWxlZDsgfQogCisgICAgLy8g
Tm90ZTogVGhlIG9ubHkgdGhpbmcgdGhlIHRpbWVyIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBjYW5u
b3QgZG8gaXMKKyAgICAvLyBjYWxsIHNjaGVkdWxlVGltZXIoKS4gVGhpcyB3aWxsIGNhdXNlIGEg
ZGVhZGxvY2suIEl0IHdvdWxkIG5vdAorICAgIC8vIGJlIGhhcmQgdG8gbWFrZSB0aGlzIHdvcmss
IGhvd2V2ZXIsIHRoZXJlIGFyZSBubyBjbGllbnRzIHRoYXQgbmVlZAorICAgIC8vIHRoaXMgYmVo
YXZpb3IuIFdlIHNob3VsZCBpbXBsZW1lbnQgaXQgb25seSBpZiB3ZSBmaW5kIHRoYXQgd2UgbmVl
ZCBpdC4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFRpbWVyU2V0Tm90aWZpY2F0aW9u
KFRpbWVyTm90aWZpY2F0aW9uQ2FsbGJhY2spOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cmVtb3ZlVGltZXJTZXROb3RpZmljYXRpb24oVGltZXJOb3RpZmljYXRpb25DYWxsYmFjayk7CiAK
QEAgLTg3LDYgKzkxLDcgQEAgcHJvdGVjdGVkOgogICAgIFJ1bkxvb3A6OlRpbWVyPEpTUnVuTG9v
cFRpbWVyPiBtX3RpbWVyOwogI2VuZGlmCiAKKyAgICBMb2NrIG1fdGltZXJDYWxsYmFja3NMb2Nr
OwogICAgIEhhc2hTZXQ8VGltZXJOb3RpZmljYXRpb25DYWxsYmFjaz4gbV90aW1lclNldENhbGxi
YWNrczsKICAgICAKIHByaXZhdGU6Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>