lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi - apologies for my ignorance, but I'm quite new to Lua.

I am writing a system where multiple Lua threads are created and updated in series on one CPU thread. The lua code can call a Sleep(n) function which calls a C function which yields the thread (lua_yield()) and puts it on an inactive list. This inactive list is checked 30 times a second and any threads that have slept for long enough are then continued by calling lua_resume() on them.

This is working fine if I only have a few threads executing, but if I put the code under stress and create a lot of lua threads, I get the following error when I call lua_resume on a yielded thread:

cannot resume non-suspended coroutine

After doing a bit of digging around on the internet I think this is being caused by the thread being garbage collected while it is yielded. Can someone please verify if my observed behaviour fits in with this diagnosis, and if so, what is the easiest way to stop a yielded thread from being garbage collected ?

Thanks for any help you can give.

- Martin