diff options
author | Mike Pall <mike> | 2010-03-01 05:51:04 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-03-01 05:51:04 +0100 |
commit | 7e696124ec94c0312b4a23d07ba2fb15cc1014b9 (patch) | |
tree | a9f34fc8b97bca727a5f815b8913938939a493e3 /src | |
parent | 89c90f09555598cf67735dbed7f4fb46941f2e5c (diff) | |
download | luajit-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.c | 13 |
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. */ |
95 | void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need) | 95 | void 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 | } |