aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-03-01 05:51:04 +0100
committerMike Pall <mike>2010-03-01 05:51:04 +0100
commit7e696124ec94c0312b4a23d07ba2fb15cc1014b9 (patch)
treea9f34fc8b97bca727a5f815b8913938939a493e3 /src
parent89c90f09555598cf67735dbed7f4fb46941f2e5c (diff)
downloadluajit-7e696124ec94c0312b4a23d07ba2fb15cc1014b9.tar.gz
luajit-7e696124ec94c0312b4a23d07ba2fb15cc1014b9.tar.bz2
luajit-7e696124ec94c0312b4a23d07ba2fb15cc1014b9.zip
Resize stack up to the true limit.
Diffstat (limited to 'src')
-rw-r--r--src/lj_state.c13
1 files changed, 11 insertions, 2 deletions
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)
94/* Try to grow stack. */ 94/* Try to grow stack. */
95void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need) 95void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need)
96{ 96{
97 if (L->stacksize > LJ_STACK_MAXEX) /* overflow while handling overflow? */ 97 MSize n;
98 if (L->stacksize > LJ_STACK_MAXEX) /* Overflow while handling overflow? */
98 lj_err_throw(L, LUA_ERRERR); 99 lj_err_throw(L, LUA_ERRERR);
99 resizestack(L, L->stacksize + (need > L->stacksize ? need : L->stacksize)); 100 n = L->stacksize + need;
101 if (n > LJ_STACK_MAX) {
102 n += 2*LUA_MINSTACK;
103 } else if (n < 2*L->stacksize) {
104 n = 2*L->stacksize;
105 if (n >= LJ_STACK_MAX)
106 n = LJ_STACK_MAX;
107 }
108 resizestack(L, n);
100 if (L->stacksize > LJ_STACK_MAXEX) 109 if (L->stacksize > LJ_STACK_MAXEX)
101 lj_err_msg(L, LJ_ERR_STKOV); 110 lj_err_msg(L, LJ_ERR_STKOV);
102} 111}