aboutsummaryrefslogtreecommitdiff
path: root/src/lj_state.c
diff options
context:
space:
mode:
authorMike Pall <mike>2023-11-05 16:34:46 +0100
committerMike Pall <mike>2023-11-05 16:34:46 +0100
commit07b3cd3cf9b57a3801a1ebc48144767e31671f21 (patch)
treef8d8eeed931dc75a7f3853271c14e087f76731ec /src/lj_state.c
parent0afa1676b2d2aabf1f3101a2692eb0f1e291076a (diff)
downloadluajit-07b3cd3cf9b57a3801a1ebc48144767e31671f21.tar.gz
luajit-07b3cd3cf9b57a3801a1ebc48144767e31671f21.tar.bz2
luajit-07b3cd3cf9b57a3801a1ebc48144767e31671f21.zip
Check for upvalue state transition in IR_UREFO.
Thanks to Peter Cawley. #1085
Diffstat (limited to '')
-rw-r--r--src/lj_state.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/lj_state.c b/src/lj_state.c
index 6efe189d..7e4961bd 100644
--- a/src/lj_state.c
+++ b/src/lj_state.c
@@ -346,8 +346,11 @@ void LJ_FASTCALL lj_state_free(global_State *g, lua_State *L)
346 lj_assertG(L != mainthread(g), "free of main thread"); 346 lj_assertG(L != mainthread(g), "free of main thread");
347 if (obj2gco(L) == gcref(g->cur_L)) 347 if (obj2gco(L) == gcref(g->cur_L))
348 setgcrefnull(g->cur_L); 348 setgcrefnull(g->cur_L);
349 lj_func_closeuv(L, tvref(L->stack)); 349 if (gcref(L->openupval) != NULL) {
350 lj_assertG(gcref(L->openupval) == NULL, "stale open upvalues"); 350 lj_func_closeuv(L, tvref(L->stack));
351 lj_trace_abort(g); /* For aa_uref soundness. */
352 lj_assertG(gcref(L->openupval) == NULL, "stale open upvalues");
353 }
351 lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue); 354 lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue);
352 lj_mem_freet(g, L); 355 lj_mem_freet(g, L);
353} 356}