Changeset

13332:17cb965e55b7

util.async: Record current work item in the runner object Mostly expected to be useful for debugging purposes.
author Matthew Wild <mwild1@gmail.com>
date Tue, 21 Nov 2023 18:13:42 +0000
parents 13331:5206314d6c70
children 13333:fa4143163e01
files util/async.lua
diffstat 1 files changed, 5 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/util/async.lua	Tue Nov 21 18:12:49 2023 +0000
+++ b/util/async.lua	Tue Nov 21 18:13:42 2023 +0000
@@ -201,6 +201,7 @@
 		for i = 1,n do
 			local queued_input = q[i];
 			self:log("Resuming thread with new item [%s]", thread);
+			self.current_item = queued_input;
 			local ok, new_state = coroutine.resume(thread, queued_input);
 			if not ok then
 				-- There was an error running the coroutine, save the error, mark runner as ready to begin again
@@ -227,6 +228,10 @@
 	end
 	-- Runner processed all items it can, so save current runner state
 	self.state = state;
+	if state == "ready" and self.current_item then
+		self.current_item = nil;
+	end
+
 	if err or state ~= self.notified_state then
 		self:log("debug", "changed state from %s to %s [%s %s]", self.notified_state, err and ("error ("..state..")") or state, self.thread, self.thread and coroutine.status(self.thread));
 		if err then