aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2020-09-15 01:02:24 +0200
committerMike Pall <mike>2020-09-15 01:02:24 +0200
commitdd5032ed844c56964347c7916db66b0eb11d8091 (patch)
treeaaff8bc06f3d9ca4c98e2c5b83304e6be0ac9749
parentcc44642cf89198e39aa41067c4e1e9879a82c2f5 (diff)
downloadluajit-dd5032ed844c56964347c7916db66b0eb11d8091.tar.gz
luajit-dd5032ed844c56964347c7916db66b0eb11d8091.tar.bz2
luajit-dd5032ed844c56964347c7916db66b0eb11d8091.zip
Fix lua_yield() from C hook.
Reported by Jason Carr.
Diffstat (limited to '')
-rw-r--r--src/lj_api.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lj_api.c b/src/lj_api.c
index f1cfebbc..f53ecc35 100644
--- a/src/lj_api.c
+++ b/src/lj_api.c
@@ -1210,11 +1210,12 @@ LUA_API int lua_yield(lua_State *L, int nresults)
1210 setcont(top, lj_cont_hook); 1210 setcont(top, lj_cont_hook);
1211 if (LJ_FR2) top++; 1211 if (LJ_FR2) top++;
1212 setframe_pc(top, cframe_pc(cf)-1); 1212 setframe_pc(top, cframe_pc(cf)-1);
1213 if (LJ_FR2) top++; 1213 top++;
1214 setframe_gc(top, obj2gco(L), LJ_TTHREAD); 1214 setframe_gc(top, obj2gco(L), LJ_TTHREAD);
1215 if (LJ_FR2) top++;
1215 setframe_ftsz(top, ((char *)(top+1)-(char *)L->base)+FRAME_CONT); 1216 setframe_ftsz(top, ((char *)(top+1)-(char *)L->base)+FRAME_CONT);
1216 L->top = L->base = top+1; 1217 L->top = L->base = top+1;
1217#if LJ_TARGET_X64 1218#if ((defined(__GNUC__) || defined(__clang__)) && (LJ_TARGET_X64 || defined(LUAJIT_UNWIND_EXTERNAL)) && !LJ_NO_UNWIND) || LJ_TARGET_WINDOWS
1218 lj_err_throw(L, LUA_YIELD); 1219 lj_err_throw(L, LUA_YIELD);
1219#else 1220#else
1220 L->cframe = NULL; 1221 L->cframe = NULL;