diff options
author | Matthew Wild <mwild1@gmail.com> | 2018-03-22 07:46:23 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2018-03-22 07:46:23 +0000 |
commit | 430eef84208c1e4a0d07a2b32d76dccea731ca13 (patch) | |
tree | 849da7e4f75b2bc0551d160f470f1601192e2fe5 | |
parent | 8e469e0a76088d18886784fba9fc044c692987d4 (diff) | |
download | prosody-430eef84208c1e4a0d07a2b32d76dccea731ca13.tar.gz prosody-430eef84208c1e4a0d07a2b32d76dccea731ca13.zip |
util.async: Add ready() to check whether running in async context
-rw-r--r-- | spec/util_async_spec.lua | 14 | ||||
-rw-r--r-- | util/async.lua | 6 |
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 }; |