util/async.lua
changeset 11966 9a70a543c727
parent 11965 542a9a503073
child 12314 91af1697ddd8
--- a/util/async.lua	Mon Nov 29 14:11:24 2021 +0000
+++ b/util/async.lua	Mon Nov 29 14:14:30 2021 +0000
@@ -13,6 +13,9 @@
 
 -- Configurable functions
 local schedule_task = nil; -- schedule_task(seconds, callback)
+local next_tick = function (f)
+	f();
+end
 
 local function runner_from_thread(thread)
 	local level = 0;
@@ -62,8 +65,10 @@
 		-- If state is 'ready', it is our responsibility to update runner.state from 'waiting'.
 		-- We also have to :run(), because the queue might have further items that will not be
 		-- processed otherwise. FIXME: It's probably best to do this in a nexttick (0 timer).
-		runner.state = "ready";
-		runner:run();
+		next_tick(function ()
+			runner.state = "ready";
+			runner:run();
+		end);
 	end
 	return true;
 end
@@ -286,5 +291,6 @@
 	wait_for = wait_for;
 	sleep = sleep;
 
+	set_nexttick = function(new_next_tick) next_tick = new_next_tick; end;
 	set_schedule_function = function (new_schedule_function) schedule_task = new_schedule_function; end;
 };