Fix Lua stack corruption problem
This commit is contained in:
parent
be53d5c9f3
commit
d78c54accd
|
@ -144,8 +144,11 @@ static void correctstack (lua_State *L, TValue *oldstack) {
|
|||
void luaD_reallocstack (lua_State *L, int newsize) {
|
||||
TValue *oldstack = L->stack;
|
||||
int realsize = newsize + 1 + EXTRA_STACK;
|
||||
int block_status = is_block_gc(L);
|
||||
lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK - 1);
|
||||
set_block_gc(L); /* The GC MUST be blocked during stack reallocaiton */
|
||||
luaM_reallocvector(L, L->stack, L->stacksize, realsize, TValue);
|
||||
if (!block_status) unset_block_gc(L); /* Honour the previous block status */
|
||||
L->stacksize = realsize;
|
||||
L->stack_last = L->stack+newsize;
|
||||
correctstack(L, oldstack);
|
||||
|
|
Loading…
Reference in New Issue