[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: too many results to resume
- From: Patrick Donnelly <batrick@...>
- Date: Thu, 5 May 2011 10:51:25 -0400
On Thu, May 5, 2011 at 10:36 AM, Jeremy Jurksztowicz
<jurksztowicz@gmail.com> wrote:
> Hello,
>
> I'd like to have some info under what circumstances does the "too many
> results to resume." error occur? I'm running a coroutine and upon it's
> return this error pops up. I put a breakpoint at the error and noticed
> that the nres (number of results) is 0, and lua_checkstack(L, nres+1)
> fails. So I assumed that my stack was getting trashed somewhere (Is
> that assumption wrong?). To find the source of the error I stackdumped
> at the end of the function that is being run in the coroutine and got
> only one stack element: The thread (coroutine) that is running the
> function. I also stackdumped at the actual error (right before it
> prints the message) and got a stack filled with A) My error function
> that I pass to lua_pall B) Booleans (true and false) C) The number 1.
> So somewhere between the return call and the end of coroutine.resume
> something goes awfully wrong. My first instinct was to look for
> infinite loop/recursion, but couldn't find one. So my questions are:
>
> 1) Under what conditions would a "too many results to resume." error
> most likely occur.
A (C) Lua stack cannot exceed LUAI_MAXCSTACK (8000). You passed too
many results to coroutine.resume:
> t = {}; for i = 1, 8000 do t[i] = 1 end
> coroutine.resume(coroutine.create(function() end), unpack(t))
stdin:1: too many results to unpack
stack traceback:
[C]: in function 'unpack'
stdin:1: in main chunk
[C]: ?
> t = {}; for i = 1, 7999 do t[i] = 1 end
> coroutine.resume(coroutine.create(function() end), unpack(t))
--
- Patrick Donnelly