Log In  


Hi,
Coroutines are an essential part of my game engines.
However, I don't get how I can do both:

  • raise an error when something bad happens
  • silently handle proper coroutine termination

coresume returns a pair (is running,exception).
Thing is exception is set even during normal termination!!
note: costatus doesn't help as it immediately flips to "dead" when the coroutine crashes.

Something like that doesn't work, e.g. I get an assert even after genuine termination:

local co
function _init()
	co=cocreate(function()
		for i=1,10 do
			yield()
		end
               -- syntax error test
	       -- i=k/10
	end)
end

function _update()
	if co then
	 local r,e=coresume(co)
	 print(costatus(co))
	 if not r then
	 	if(e) assert(r,e)
	 	-- never reached
	 	co=nil
	 end
	end
end


you're doing a coresume on a dead coroutine, it returns an error as it should.
try checking its status beforehand:

if co then
	local cs=costatus(co)
	if cs=="suspended" then
		print("suspended")
		local r,e=coresume(co)
		if (not r) assert(r,e)
	elseif cs=="dead" then
		print("done")
		co=nil
	else
		print("running")
	end
end

Status check beforehand? facepalm

Thanks



[Please log in to post a comment]