diff options
author | Mike Pall <mike> | 2023-09-21 03:54:08 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2023-09-21 03:54:08 +0200 |
commit | e86990f7f24a94b0897061f25a84547fe1108bed (patch) | |
tree | 802772b8f190aee2888f799a1fa28c63545e6d33 /src | |
parent | b8919781d4717d8c3171b0002d230e03304d8174 (diff) | |
download | luajit-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.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); |