lua-users home
lua-l archive

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


Thanks. So after creating the new thread, stack position -1 contains a thread object. When you say to keep a reference to it do I need to create a Lua table entry which contains that thread object ? Or is there a simpler way ?

Cheers

On 23 Nov 2011, at 23:10, HyperHacker wrote:

> On Wed, Nov 23, 2011 at 15:48, Martin Linklater <mslinklater@gmail.com> wrote:
>> 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
>> 
> 
> It shouldn't be collected as long as there's a reference to it.
> 
> -- 
> Sent from my toaster.
>