diff --git a/client/deps/liblua/lgc.c b/client/deps/liblua/lgc.c index 6b407cc86..6d39bb643 100644 --- a/client/deps/liblua/lgc.c +++ b/client/deps/liblua/lgc.c @@ -490,17 +490,25 @@ static lu_mem traverseLclosure(global_State *g, LClosure *cl) { static lu_mem traversestack(global_State *g, lua_State *th) { + int n = 0; StkId o = th->stack; if (o == NULL) return 1; /* stack not completely built yet */ - for (; o < th->top; o++) + + for (; o < th->top; o++) /* mark live elements in the stack */ markvalue(g, o); + if (g->gcstate == GCSatomic) { /* final traversal? */ StkId lim = th->stack + th->stacksize; /* real end of stack */ for (; o < lim; o++) /* clear not-marked stack slice */ setnilvalue(o); + + } else { /* count call infos to compute size */ + CallInfo *ci; + for (ci = &th->base_ci; ci != th->ci; ci = ci->next) + n++; } - return sizeof(lua_State) + sizeof(TValue) * th->stacksize; + return sizeof(lua_State) + sizeof(TValue) * th->stacksize + sizeof(CallInfo) * n; }