aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lj_err.c5
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);