From 7e696124ec94c0312b4a23d07ba2fb15cc1014b9 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 1 Mar 2010 05:51:04 +0100 Subject: Resize stack up to the true limit. --- src/lj_state.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lj_state.c b/src/lj_state.c index 275dde44..2164b900 100644 --- a/src/lj_state.c +++ b/src/lj_state.c @@ -94,9 +94,18 @@ void lj_state_shrinkstack(lua_State *L, MSize used) /* Try to grow stack. */ void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need) { - if (L->stacksize > LJ_STACK_MAXEX) /* overflow while handling overflow? */ + MSize n; + if (L->stacksize > LJ_STACK_MAXEX) /* Overflow while handling overflow? */ lj_err_throw(L, LUA_ERRERR); - resizestack(L, L->stacksize + (need > L->stacksize ? need : L->stacksize)); + n = L->stacksize + need; + if (n > LJ_STACK_MAX) { + n += 2*LUA_MINSTACK; + } else if (n < 2*L->stacksize) { + n = 2*L->stacksize; + if (n >= LJ_STACK_MAX) + n = LJ_STACK_MAX; + } + resizestack(L, n); if (L->stacksize > LJ_STACK_MAXEX) lj_err_msg(L, LJ_ERR_STKOV); } -- cgit v1.2.3-55-g6feb