Re: Trying to recover from an error in a coroutine
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: Trying to recover from an error in a coroutine
- From: Rici Lake <lua@...>
- Date: 2005年12月19日 09:22:43 -0500
On 19-Dec-05, at 1:09 AM, David Morris-Oliveros wrote:
I have a few coroutines running within a stateful world.
I want to be able to guard against dodgy scripts that aren't written
properly, so I setup a little protocol that all my coroutined scripts
have to follow:
-- begin
function SETUP() ... end
function RUN() ... end
function CLEANUP() ... end
-- end
SETUP & CLEANUP are optional - they'll be called if present. RUN is
compulsory, if not present, an assert will fire, and we'll all run off
to fix that script. The script is executed with lua_resume to populate
_G with these functions, then they are retrieved and called, SETUP &
CLEANUP with lua_pcall and RUN with lua_resume (because I want o
manually timeslice them).
I want my script system to be able to recover from an error within
RUN(). But I have found that if i call error() or lua_error within
RUN(), lua_resume with the correct code (LUA_ERRERR), but I can't
really do anything else with that lua_State, if I try to
lua_pushnumber() it will assert (I have lua asserts turned on).
That's certainly true; the lua_State is unusable. But there is nothing
forcing you to call CLEANUP() within that particular lua_State.