aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2023-09-21 03:54:08 +0200
committerMike Pall <mike>2023-09-21 03:54:08 +0200
commite86990f7f24a94b0897061f25a84547fe1108bed (patch)
tree802772b8f190aee2888f799a1fa28c63545e6d33 /src
parentb8919781d4717d8c3171b0002d230e03304d8174 (diff)
downloadluajit-e86990f7f24a94b0897061f25a84547fe1108bed.tar.gz
luajit-e86990f7f24a94b0897061f25a84547fe1108bed.tar.bz2
luajit-e86990f7f24a94b0897061f25a84547fe1108bed.zip
Restore cur_L for specific Lua/C API use case.
Thanks to Peter Cawley. #1066
Diffstat (limited to 'src')
-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);