diff options
-rw-r--r-- | src/lj_err.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lj_err.c b/src/lj_err.c index cadc76bd..7b11e4d0 100644 --- a/src/lj_err.c +++ b/src/lj_err.c | |||
@@ -174,12 +174,15 @@ static void *err_unwind(lua_State *L, void *stopcf, int errcode) | |||
174 | case FRAME_PCALL: /* FF pcall() frame. */ | 174 | case FRAME_PCALL: /* FF pcall() frame. */ |
175 | case FRAME_PCALLH: /* FF pcall() frame inside hook. */ | 175 | case FRAME_PCALLH: /* FF pcall() frame inside hook. */ |
176 | if (errcode) { | 176 | if (errcode) { |
177 | global_State *g; | ||
177 | if (errcode == LUA_YIELD) { | 178 | if (errcode == LUA_YIELD) { |
178 | frame = frame_prevd(frame); | 179 | frame = frame_prevd(frame); |
179 | break; | 180 | break; |
180 | } | 181 | } |
182 | g = G(L); | ||
183 | setgcref(g->cur_L, obj2gco(L)); | ||
181 | if (frame_typep(frame) == FRAME_PCALL) | 184 | if (frame_typep(frame) == FRAME_PCALL) |
182 | hook_leave(G(L)); | 185 | hook_leave(g); |
183 | L->base = frame_prevd(frame) + 1; | 186 | L->base = frame_prevd(frame) + 1; |
184 | L->cframe = cf; | 187 | L->cframe = cf; |
185 | unwindstack(L, L->base); | 188 | unwindstack(L, L->base); |