[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: LuaJIT + Coco : coroutine issue
- From: Mike Pall <mikelu-0512@...>
- Date: Mon, 12 Dec 2005 15:42:25 +0100
Dmitriy Iassenev wrote:
> I have the following problem : when coroutine.yield is called from the
> script side in the thread, which is created from the C side using
> lua_newthread, an error
> "attempt to yield across metamethod/C-call boundary"
> occured. If I change to lua_newcthread, all is ok.
This is ok and expected. JIT compiled functions behave like
C functions, i.e. Coco is required for yielding.
> But all is ok only in case when newly created thread is in the lua
> stack, though I use luaL_ref for referencing thread to prevent it to
> be garbage collected and to remove it form the lua stack. This scheme
> works fine for Lua 5.1 alpha, but it doesn work with LuaJIT + Coco.
Well, but what happens? An error or a crash?
* You get the above error: This must be a logic error somewhere.
You are resuming the wrong coroutine or a coroutine not created
with lua_newcthread. You may never notice this with plain Lua.
* A crash when running under Windows XP: Please apply this change:
* Still a crash in a random place: Are you 100% sure you've made a
reference to the coroutine? The incremental garbage collection is
very sensitive to tiny changes and LuaJIT obviously allocates a
few more objects. I suggest you turn on assertions as described in
and then check if you get strange errors. This almost always
means a coroutine reference has been lost.
> What am I doing wrong? Does LuaJIT depends on luaopen_... sequence?
Not really (at least not yet). The sequence you are using is fine
and matches the order in linit.c. I suggest you keep it.