diff options
author | Mike Pall <mike> | 2023-11-05 16:34:46 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2023-11-05 16:34:46 +0100 |
commit | 07b3cd3cf9b57a3801a1ebc48144767e31671f21 (patch) | |
tree | f8d8eeed931dc75a7f3853271c14e087f76731ec /src/lj_state.c | |
parent | 0afa1676b2d2aabf1f3101a2692eb0f1e291076a (diff) | |
download | luajit-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.c | 7 |
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 | } |