[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [PATCH] lua_forcereturn()
- From: "Alexander Gladysh" <agladysh@...>
- Date: Sat, 19 Jul 2008 02:33:16 +0400
On Thu, Jul 17, 2008 at 12:47 AM, Chip Salzenberg <chip@pobox.com> wrote:
<...>
> Mark's very clever approach is to introduce a
> "must exit" bit in the Lua state; when that bit is set, the Lua VM starts
> seeing all instructions as unconditional returns. Within a few microseconds,
> you should be *pop* back out of your lua_(p)call.
I apologise for being not quite in context, so my question may be a
silly one. I see the expected use case of this feature roughly as
follows (pseudocode):
1. [worker thread] spawn_watchdog_thread(L); lua_pcall(L, <stuff>);
stop_watchdog_thread();
2. [watchdog thread] if (spent_too_much_time()) lua_forcereturn(L, 1);
If forcereturn is triggered, lua_pcall() returns (prematurely) in
worker thread, and worker thread execution continues as usual.
The question: How would worker thread know that lua_pcall() returned
due to lua_forcereturn() call somewhere (except that it may ask the
watchdog thread)?
I'd expect some LUA_ERRFORCED return code -- anyway, this is an error
scenario, since our script presumably was stopped somewhere in the
middle. Would I be able to reuse the Lua state after lua_(p)call() was
"forcereturned"? If not, then how is such forcereturning different
from, say, just calling lua_panic() righ after it was detected that
forcereturn flag was set?
Alexander.