<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://hg.omfa.de/prosody-hg/</link>
    <language>en-us</language>

    <title>prosody-hg: util/async.lua history</title>
    <description>util/async.lua revision history</description>
    <item>
    <title>util.async: Clip long line [luacheck]</title>
    <link>http://hg.omfa.de/prosody-hg/log/5e258164d214/util/async.lua</link>
    <description><![CDATA[util.async: Clip long line [luacheck]]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 21 Nov 2023 22:18:17 +0100</pubDate>
</item>
<item>
    <title>util.async: Expose default runner function</title>
    <link>http://hg.omfa.de/prosody-hg/log/fa4143163e01/util/async.lua</link>
    <description><![CDATA[util.async: Expose default runner function<br/>
<br/>
This is purely for informational purposes, so it's possible to determine<br/>
externally whether a runner is using the default runner function (which<br/>
executes functions as work items) or a custom runner function.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Tue, 21 Nov 2023 18:14:51 +0000</pubDate>
</item>
<item>
    <title>util.async: Record current work item in the runner object</title>
    <link>http://hg.omfa.de/prosody-hg/log/17cb965e55b7/util/async.lua</link>
    <description><![CDATA[util.async: Record current work item in the runner object<br/>
<br/>
Mostly expected to be useful for debugging purposes.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Tue, 21 Nov 2023 18:13:42 +0000</pubDate>
</item>
<item>
    <title>util.async: Improve debug logging in a few places</title>
    <link>http://hg.omfa.de/prosody-hg/log/5206314d6c70/util/async.lua</link>
    <description><![CDATA[util.async: Improve debug logging in a few places<br/>
<br/>
Knowing the state of the coroutine as well as the runner state can be helpful.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Tue, 21 Nov 2023 18:12:49 +0000</pubDate>
</item>
<item>
    <title>util.async: Export a table of currently-waiting runners</title>
    <link>http://hg.omfa.de/prosody-hg/log/49ecfb070240/util/async.lua</link>
    <description><![CDATA[util.async: Export a table of currently-waiting runners<br/>
<br/>
This can be used for debugging and introspection.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Tue, 21 Nov 2023 18:11:40 +0000</pubDate>
</item>
<item>
    <title>util: Prefix module imports with prosody namespace</title>
    <link>http://hg.omfa.de/prosody-hg/log/d10957394a3c/util/async.lua</link>
    <description><![CDATA[util: Prefix module imports with prosody namespace]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 17 Mar 2023 16:23:16 +0100</pubDate>
</item>
<item>
    <title>util.async: Optionally allow too many 'done' callbacks</title>
    <link>http://hg.omfa.de/prosody-hg/log/91af1697ddd8/util/async.lua</link>
    <description><![CDATA[util.async: Optionally allow too many 'done' callbacks<br/>
<br/>
Sometimes, like in mod_c2s and mod_s2s during shutdown, all you want is<br/>
to wait for the first done() and not complicate things.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 22 Feb 2022 14:17:10 +0100</pubDate>
</item>
<item>
    <title>util.async: Add next-tick configuration</title>
    <link>http://hg.omfa.de/prosody-hg/log/9a70a543c727/util/async.lua</link>
    <description><![CDATA[util.async: Add next-tick configuration<br/>
<br/>
Running woken runners in the next iteration of the event loop prevents<br/>
unexpected recursion, unexpected tracebacks, and is generally more<br/>
predictable.<br/>
<br/>
The pattern is borrowed from util.promise, where we're now doing the same.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 29 Nov 2021 14:14:30 +0000</pubDate>
</item>
<item>
    <title>util.async: Add sleep() method with configurable scheduling backend</title>
    <link>http://hg.omfa.de/prosody-hg/log/542a9a503073/util/async.lua</link>
    <description><![CDATA[util.async: Add sleep() method with configurable scheduling backend<br/>
<br/>
No scheduler set by default, so it will error (we plan to initialize it in<br/>
util.startup).<br/>
<br/>
We wanted to avoid a hard dependency on util.timer (which in turn depends on<br/>
network backends, etc.), and we didn't add timer.sleep() because we didn't<br/>
want to add a hard dependency on util.async for things that don't need it.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 29 Nov 2021 14:11:24 +0000</pubDate>
</item>
<item>
    <title>util.async: Don't attempt to close thread if not created yet</title>
    <link>http://hg.omfa.de/prosody-hg/log/558f0555ba02/util/async.lua</link>
    <description><![CDATA[util.async: Don't attempt to close thread if not created yet]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sun, 14 Jun 2020 09:40:08 +0100</pubDate>
</item>
<item>
    <title>util.async: Call coroutine.close() on dead threads (Lua 5.4)</title>
    <link>http://hg.omfa.de/prosody-hg/log/69a4b0e3565f/util/async.lua</link>
    <description><![CDATA[util.async: Call coroutine.close() on dead threads (Lua 5.4)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sun, 14 Jun 2020 08:49:32 +0100</pubDate>
</item>
<item>
    <title>util.async: Rename wait -&gt; wait_for (w/compat)</title>
    <link>http://hg.omfa.de/prosody-hg/log/79faf5b98395/util/async.lua</link>
    <description><![CDATA[util.async: Rename wait -&gt; wait_for (w/compat)<br/>
<br/>
Agreed this name is clearer and wait_for(thing) reads well in code.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sat, 13 Jun 2020 08:01:57 +0100</pubDate>
</item>
<item>
    <title>util.async: Add function for waiting on promises and unpacking the results</title>
    <link>http://hg.omfa.de/prosody-hg/log/7b48b620164c/util/async.lua</link>
    <description><![CDATA[util.async: Add function for waiting on promises and unpacking the results]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 29 Sep 2019 18:42:35 +0200</pubDate>
</item>
<item>
    <title>Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall</title>
    <link>http://hg.omfa.de/prosody-hg/log/acf74ad0b795/util/async.lua</link>
    <description><![CDATA[Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 26 Oct 2018 19:32:00 +0100</pubDate>
</item>
<item>
    <title>util.async: Remove sleep function</title>
    <link>http://hg.omfa.de/prosody-hg/log/83e7ad5818d3/util/async.lua</link>
    <description><![CDATA[util.async: Remove sleep function<br/>
<br/>
Dependency on util.timer indirectly caused net.server to be initialized<br/>
before the config was read, so server_select was always chosen.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 12 Aug 2018 23:52:39 +0200</pubDate>
</item>
<item>
    <title>util.{async,timer}: Move sleep() to reduce dependencies of util.timer</title>
    <link>http://hg.omfa.de/prosody-hg/log/2e6f7ab97794/util/async.lua</link>
    <description><![CDATA[util.{async,timer}: Move sleep() to reduce dependencies of util.timer]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 08 Jul 2018 00:37:01 +0200</pubDate>
</item>
<item>
    <title>MUC: Add config option to allow members to invite other members to the room (previously only owners/admins could do this)</title>
    <link>http://hg.omfa.de/prosody-hg/log/92f0876b9230/util/async.lua</link>
    <description><![CDATA[MUC: Add config option to allow members to invite other members to the room (previously only owners/admins could do this)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 06 Jul 2018 15:33:46 +0100</pubDate>
</item>
<item>
    <title>util.async: Copy hooks from main thread into coroutines</title>
    <link>http://hg.omfa.de/prosody-hg/log/ed0891383e78/util/async.lua</link>
    <description><![CDATA[util.async: Copy hooks from main thread into coroutines]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 25 Jun 2018 13:53:17 +0100</pubDate>
</item>
<item>
    <title>util.async: Move runner id into log tag</title>
    <link>http://hg.omfa.de/prosody-hg/log/7a9b680a79fb/util/async.lua</link>
    <description><![CDATA[util.async: Move runner id into log tag<br/>
<br/>
Avoids string concatenation in every logger call]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 04 May 2018 00:10:17 +0200</pubDate>
</item>
<item>
    <title>util.async: Add helper methods for setting watchers</title>
    <link>http://hg.omfa.de/prosody-hg/log/01264bc60c2b/util/async.lua</link>
    <description><![CDATA[util.async: Add helper methods for setting watchers]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 30 Apr 2018 12:53:53 +0100</pubDate>
</item>
<item>
    <title>util.timer: Move sleep() here from util.async</title>
    <link>http://hg.omfa.de/prosody-hg/log/2548111e71d6/util/async.lua</link>
    <description><![CDATA[util.timer: Move sleep() here from util.async<br/>
<br/>
This is to solve a indirect dependency issue where net.server was initialized before the config was read]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 23 Mar 2018 21:18:15 +0100</pubDate>
</item>
<item>
    <title>util.async: Remove last trace of async.once [luacheck]</title>
    <link>http://hg.omfa.de/prosody-hg/log/801f253ef52d/util/async.lua</link>
    <description><![CDATA[util.async: Remove last trace of async.once [luacheck]]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 23 Mar 2018 20:57:34 +0100</pubDate>
</item>
<item>
    <title>util.async: Remove async.once(), can now be replaced by runner():run(func)</title>
    <link>http://hg.omfa.de/prosody-hg/log/867ac771fb6e/util/async.lua</link>
    <description><![CDATA[util.async: Remove async.once(), can now be replaced by runner():run(func)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 23 Mar 2018 14:22:01 +0000</pubDate>
</item>
<item>
    <title>util.async: Make parameters to async.runner() optional</title>
    <link>http://hg.omfa.de/prosody-hg/log/0c077800cd70/util/async.lua</link>
    <description><![CDATA[util.async: Make parameters to async.runner() optional]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 23 Mar 2018 14:02:33 +0000</pubDate>
</item>
<item>
    <title>util.async: Use wrapper for once runner (thanks luacheck)</title>
    <link>http://hg.omfa.de/prosody-hg/log/2aa85b0cd2b8/util/async.lua</link>
    <description><![CDATA[util.async: Use wrapper for once runner (thanks luacheck)]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 22 Mar 2018 23:15:04 +0100</pubDate>
</item>
<item>
    <title>util.async: Allow nil as a guard key</title>
    <link>http://hg.omfa.de/prosody-hg/log/ba6a6a04b46c/util/async.lua</link>
    <description><![CDATA[util.async: Allow nil as a guard key]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Thu, 22 Mar 2018 16:26:09 +0000</pubDate>
</item>
<item>
    <title>util.async: Add sleep() method</title>
    <link>http://hg.omfa.de/prosody-hg/log/1b7c5933b215/util/async.lua</link>
    <description><![CDATA[util.async: Add sleep() method]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Thu, 22 Mar 2018 13:02:00 +0000</pubDate>
</item>
<item>
    <title>util.async: Add once() to create temporary runners</title>
    <link>http://hg.omfa.de/prosody-hg/log/9246f64d6f1e/util/async.lua</link>
    <description><![CDATA[util.async: Add once() to create temporary runners]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Thu, 22 Mar 2018 07:56:01 +0000</pubDate>
</item>
<item>
    <title>util.async: Add ready() to check whether running in async context</title>
    <link>http://hg.omfa.de/prosody-hg/log/ca710a71d730/util/async.lua</link>
    <description><![CDATA[util.async: Add ready() to check whether running in async context]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Thu, 22 Mar 2018 07:46:23 +0000</pubDate>
</item>
<item>
    <title>util.async: Bump log warnings to error level</title>
    <link>http://hg.omfa.de/prosody-hg/log/ddb04cacb8b1/util/async.lua</link>
    <description><![CDATA[util.async: Bump log warnings to error level]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 19 Mar 2018 11:51:40 +0000</pubDate>
</item>
<item>
    <title>util.async: Split runner_continue into smaller functions for easier testing and safety</title>
    <link>http://hg.omfa.de/prosody-hg/log/24b59a62acce/util/async.lua</link>
    <description><![CDATA[util.async: Split runner_continue into smaller functions for easier testing and safety]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sun, 18 Mar 2018 12:05:38 +0000</pubDate>
</item>
<item>
    <title>util.async: Remove redundant line committed by mistake (Zash, luacheck)</title>
    <link>http://hg.omfa.de/prosody-hg/log/08bf4df6fdb7/util/async.lua</link>
    <description><![CDATA[util.async: Remove redundant line committed by mistake (Zash, luacheck)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sat, 17 Mar 2018 22:03:08 +0000</pubDate>
</item>
<item>
    <title>util.async: ensure change in e77b37de482e applies after out-of-loop resume also</title>
    <link>http://hg.omfa.de/prosody-hg/log/a15c891c6232/util/async.lua</link>
    <description><![CDATA[util.async: ensure change in e77b37de482e applies after out-of-loop resume also]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sat, 17 Mar 2018 17:28:07 +0000</pubDate>
</item>
<item>
    <title>util.async: Behaviour change: continue to process queued items after errors</title>
    <link>http://hg.omfa.de/prosody-hg/log/e77b37de482e/util/async.lua</link>
    <description><![CDATA[util.async: Behaviour change: continue to process queued items after errors]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sat, 17 Mar 2018 14:54:48 +0000</pubDate>
</item>
<item>
    <title>util.async: Convert asserts to a return false (same as other unexpected behaviour)</title>
    <link>http://hg.omfa.de/prosody-hg/log/dbb4788db8e3/util/async.lua</link>
    <description><![CDATA[util.async: Convert asserts to a return false (same as other unexpected behaviour)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sat, 17 Mar 2018 11:46:21 +0000</pubDate>
</item>
<item>
    <title>util.async: Add comment</title>
    <link>http://hg.omfa.de/prosody-hg/log/937de0c39279/util/async.lua</link>
    <description><![CDATA[util.async: Add comment]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 16 Mar 2018 22:31:12 +0000</pubDate>
</item>
<item>
    <title>util.async: You can never have too many asserts!</title>
    <link>http://hg.omfa.de/prosody-hg/log/b03c7884fade/util/async.lua</link>
    <description><![CDATA[util.async: You can never have too many asserts!]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 16 Mar 2018 22:30:25 +0000</pubDate>
</item>
<item>
    <title>util.async: Ensure runner is left in correct state after out-of-main-loop error (+tests)</title>
    <link>http://hg.omfa.de/prosody-hg/log/9f6ab206d741/util/async.lua</link>
    <description><![CDATA[util.async: Ensure runner is left in correct state after out-of-main-loop error (+tests)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 16 Mar 2018 22:26:15 +0000</pubDate>
</item>
<item>
    <title>util.async: Log the non-error state as well when there is an error being processed</title>
    <link>http://hg.omfa.de/prosody-hg/log/1c8c7fd259c8/util/async.lua</link>
    <description><![CDATA[util.async: Log the non-error state as well when there is an error being processed]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 16 Mar 2018 17:13:20 +0000</pubDate>
</item>
<item>
    <title>util.async: Bugfix, don't continue main loop while there is a pending error</title>
    <link>http://hg.omfa.de/prosody-hg/log/dc5f3302a642/util/async.lua</link>
    <description><![CDATA[util.async: Bugfix, don't continue main loop while there is a pending error]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 16 Mar 2018 17:12:36 +0000</pubDate>
</item>
<item>
    <title>util.async: Fix order of statements so queue count makes more sense</title>
    <link>http://hg.omfa.de/prosody-hg/log/9901deadc068/util/async.lua</link>
    <description><![CDATA[util.async: Fix order of statements so queue count makes more sense]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 16 Mar 2018 17:12:09 +0000</pubDate>
</item>
<item>
    <title>util.async: Log warning when unexpected state is reached</title>
    <link>http://hg.omfa.de/prosody-hg/log/ce5b16e13573/util/async.lua</link>
    <description><![CDATA[util.async: Log warning when unexpected state is reached]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 16 Mar 2018 17:11:23 +0000</pubDate>
</item>
<item>
    <title>util.async: Add per-runner ids and add runner:log() method</title>
    <link>http://hg.omfa.de/prosody-hg/log/96f20cf92b84/util/async.lua</link>
    <description><![CDATA[util.async: Add per-runner ids and add runner:log() method]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 16 Mar 2018 14:59:41 +0000</pubDate>
</item>
<item>
    <title>util.async: Fix thread check to work correctly in Lua 5.2</title>
    <link>http://hg.omfa.de/prosody-hg/log/b751bee6a829/util/async.lua</link>
    <description><![CDATA[util.async: Fix thread check to work correctly in Lua 5.2<br/>
<br/>
coroutine.running() now returns the main thread and a boolean true if<br/>
called from the main thread, as opposed to nil in 5.1]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 21 Nov 2017 21:48:43 +0100</pubDate>
</item>
<item>
    <title>util.async: Factor out thread check into a function</title>
    <link>http://hg.omfa.de/prosody-hg/log/f652e1ea2f69/util/async.lua</link>
    <description><![CDATA[util.async: Factor out thread check into a function]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 21 Nov 2017 21:48:14 +0100</pubDate>
</item>
<item>
    <title>util.async: Fix documentation URL</title>
    <link>http://hg.omfa.de/prosody-hg/log/f81cd9aaf994/util/async.lua</link>
    <description><![CDATA[util.async: Fix documentation URL]]></description>
    <author>&#87;&#97;&#113;&#97;&#115;&#32;&#72;&#117;&#115;&#115;&#97;&#105;&#110;&#32;&#60;&#119;&#97;&#113;&#97;&#115;&#50;&#48;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 15 Sep 2017 17:17:07 -0400</pubDate>
</item>
<item>
    <title>util.async: Add annotation to ignore warning [luacheck]</title>
    <link>http://hg.omfa.de/prosody-hg/log/f928695a2af1/util/async.lua</link>
    <description><![CDATA[util.async: Add annotation to ignore warning [luacheck]]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 19 Nov 2016 01:11:28 +0100</pubDate>
</item>
<item>
    <title>util.async: Rename variable to avoid name clash [luacheck]</title>
    <link>http://hg.omfa.de/prosody-hg/log/20a69ef5570c/util/async.lua</link>
    <description><![CDATA[util.async: Rename variable to avoid name clash [luacheck]]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 19 Nov 2016 01:11:53 +0100</pubDate>
</item>
<item>
    <title>util.async: Add some more comments for clarity</title>
    <link>http://hg.omfa.de/prosody-hg/log/649b89b2c840/util/async.lua</link>
    <description><![CDATA[util.async: Add some more comments for clarity]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sun, 22 May 2016 20:06:12 +0100</pubDate>
</item>
<item>
    <title>Update every link to the documentation to use HTTPS</title>
    <link>http://hg.omfa.de/prosody-hg/log/a5a080c12c96/util/async.lua</link>
    <description><![CDATA[Update every link to the documentation to use HTTPS]]></description>
    <author>&#69;&#109;&#109;&#97;&#110;&#117;&#101;&#108;&#32;&#71;&#105;&#108;&#32;&#80;&#101;&#121;&#114;&#111;&#116;&#32;&#60;&#108;&#105;&#110;&#107;&#109;&#97;&#117;&#118;&#101;&#64;&#108;&#105;&#110;&#107;&#109;&#97;&#117;&#118;&#101;&#46;&#102;&#114;&#62;</author>
    <pubDate>Sat, 16 Apr 2016 21:08:05 +0100</pubDate>
</item>
<item>
    <title>util.async: Make guarder() local</title>
    <link>http://hg.omfa.de/prosody-hg/log/a493b79cfad0/util/async.lua</link>
    <description><![CDATA[util.async: Make guarder() local]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Tue, 13 Aug 2013 23:38:50 +0100</pubDate>
</item>
<item>
    <title>util.async: Add guarder method, to create guards to ensure only a single runner can pass through a section of code at a time</title>
    <link>http://hg.omfa.de/prosody-hg/log/0b66cb959161/util/async.lua</link>
    <description><![CDATA[util.async: Add guarder method, to create guards to ensure only a single runner can pass through a section of code at a time]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Tue, 13 Aug 2013 21:26:53 +0100</pubDate>
</item>
<item>
    <title>util.async: Fix logic bug that prevented error watcher being called for runners</title>
    <link>http://hg.omfa.de/prosody-hg/log/66c3ad5d29ad/util/async.lua</link>
    <description><![CDATA[util.async: Fix logic bug that prevented error watcher being called for runners]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Tue, 13 Aug 2013 19:23:00 +0100</pubDate>
</item>
<item>
    <title>util.async: waiter: Throw error if done() called too many times</title>
    <link>http://hg.omfa.de/prosody-hg/log/e8c79796ead9/util/async.lua</link>
    <description><![CDATA[util.async: waiter: Throw error if done() called too many times]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 12 Aug 2013 13:22:27 +0200</pubDate>
</item>
<item>
    <title>util.async: waiter: Remove restriction about wait() being called before done()</title>
    <link>http://hg.omfa.de/prosody-hg/log/aac4c6147647/util/async.lua</link>
    <description><![CDATA[util.async: waiter: Remove restriction about wait() being called before done()]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 12 Aug 2013 12:08:51 +0100</pubDate>
</item>
<item>
    <title>util.async: runner: Fix check for new state to recognise transition to 'waiting'</title>
    <link>http://hg.omfa.de/prosody-hg/log/2c98061b6b1e/util/async.lua</link>
    <description><![CDATA[util.async: runner: Fix check for new state to recognise transition to 'waiting']]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 12 Aug 2013 11:50:27 +0100</pubDate>
</item>
<item>
    <title>util.async: Make functions local</title>
    <link>http://hg.omfa.de/prosody-hg/log/959163e4d631/util/async.lua</link>
    <description><![CDATA[util.async: Make functions local]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 12 Aug 2013 10:27:08 +0100</pubDate>
</item>
<item>
    <title>util.async: New library to provide support around coroutine-based non-blocking functions</title>
    <link>http://hg.omfa.de/prosody-hg/log/3556f338caa3/util/async.lua</link>
    <description><![CDATA[util.async: New library to provide support around coroutine-based non-blocking functions]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sun, 11 Aug 2013 14:46:07 +0100</pubDate>
</item>

  </channel>
</rss>
