Comparison

util/async.lua @ 11961:542a9a503073

util.async: Add sleep() method with configurable scheduling backend No scheduler set by default, so it will error (we plan to initialize it in util.startup). We wanted to avoid a hard dependency on util.timer (which in turn depends on network backends, etc.), and we didn't add timer.sleep() because we didn't want to add a hard dependency on util.async for things that don't need it.
author Matthew Wild <mwild1@gmail.com>
date Mon, 29 Nov 2021 14:11:24 +0000
parent 10931:558f0555ba02
child 11962:9a70a543c727
comparison
equal deleted inserted replaced
11960:12a3c05aa12d 11961:542a9a503073
8 if not thread or main then 8 if not thread or main then
9 error("Not running in an async context, see https://prosody.im/doc/developers/util/async"); 9 error("Not running in an async context, see https://prosody.im/doc/developers/util/async");
10 end 10 end
11 return thread; 11 return thread;
12 end 12 end
13
14 -- Configurable functions
15 local schedule_task = nil; -- schedule_task(seconds, callback)
13 16
14 local function runner_from_thread(thread) 17 local function runner_from_thread(thread)
15 local level = 0; 18 local level = 0;
16 -- Find the 'level' of the top-most function (0 == current level, 1 == caller, ...) 19 -- Find the 'level' of the top-most function (0 == current level, 1 == caller, ...)
17 while debug.getinfo(thread, level, "") do level = level + 1; end 20 while debug.getinfo(thread, level, "") do level = level + 1; end
114 exit(); 117 exit();
115 return; 118 return;
116 end 119 end
117 return exit; 120 return exit;
118 end; 121 end;
122 end
123
124 local function sleep(seconds)
125 if not schedule_task then
126 error("async.sleep() is not available - configure schedule function");
127 end
128 local wait, done = waiter();
129 schedule_task(seconds, done);
130 wait();
119 end 131 end
120 132
121 local runner_mt = {}; 133 local runner_mt = {};
122 runner_mt.__index = runner_mt; 134 runner_mt.__index = runner_mt;
123 135
270 waiter = waiter; 282 waiter = waiter;
271 guarder = guarder; 283 guarder = guarder;
272 runner = runner; 284 runner = runner;
273 wait = wait_for; -- COMPAT w/trunk pre-0.12 285 wait = wait_for; -- COMPAT w/trunk pre-0.12
274 wait_for = wait_for; 286 wait_for = wait_for;
287 sleep = sleep;
288
289 set_schedule_function = function (new_schedule_function) schedule_task = new_schedule_function; end;
275 }; 290 };