aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2018-03-22 07:46:23 +0000
committerMatthew Wild <mwild1@gmail.com>2018-03-22 07:46:23 +0000
commit430eef84208c1e4a0d07a2b32d76dccea731ca13 (patch)
tree849da7e4f75b2bc0551d160f470f1601192e2fe5
parent8e469e0a76088d18886784fba9fc044c692987d4 (diff)
downloadprosody-430eef84208c1e4a0d07a2b32d76dccea731ca13.tar.gz
prosody-430eef84208c1e4a0d07a2b32d76dccea731ca13.zip
util.async: Add ready() to check whether running in async context
-rw-r--r--spec/util_async_spec.lua14
-rw-r--r--util/async.lua6
2 files changed, 19 insertions, 1 deletions
diff --git a/spec/util_async_spec.lua b/spec/util_async_spec.lua
index 58d54487..ac71e755 100644
--- a/spec/util_async_spec.lua
+++ b/spec/util_async_spec.lua
@@ -579,4 +579,18 @@ describe("util.async", function()
assert.spy(r.watchers.ready).was_not.called();
end);
end);
+
+ describe("#ready()", function ()
+ it("should return false outside an async context", function ()
+ assert.falsy(async.ready());
+ end);
+ it("should return true inside an async context", function ()
+ local r = new(function ()
+ assert.truthy(async.ready());
+ end);
+ r:run(true);
+ assert.spy(r.func).was.called();
+ assert.spy(r.watchers.error).was_not.called();
+ end);
+ end);
end);
diff --git a/util/async.lua b/util/async.lua
index 374a3bdf..1930d1a9 100644
--- a/util/async.lua
+++ b/util/async.lua
@@ -215,4 +215,8 @@ function runner_mt:log(level, fmt, ...)
return log(level, "[runner %s] "..fmt, self.id, ...);
end
-return { waiter = waiter, guarder = guarder, runner = runner };
+local function ready()
+ return pcall(checkthread);
+end
+
+return { ready = ready, waiter = waiter, guarder = guarder, runner = runner };