From fb22d0f80f291827a4004e16bc589b54bcc4a3c7 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 19 Aug 2024 20:00:21 +0200 Subject: [PATCH] FFI: Drop finalizer table rehash after GC cycle. Reported by Sergey Kaplun. #1247 --- src/lj_gc.c | 7 ------- src/lj_obj.h | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/lj_gc.c b/src/lj_gc.c index 69e78706..bfa4daa8 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c @@ -554,7 +554,6 @@ static void gc_finalize(lua_State *L) setcdataV(L, &tmp, gco2cd(o)); tv = lj_tab_set(L, tabref(g->gcroot[GCROOT_FFI_FIN]), &tmp); if (!tvisnil(tv)) { - g->gc.nocdatafin = 0; copyTV(L, &tmp, tv); setnilV(tv); /* Clear entry in finalizer table. */ gc_call_finalizer(g, L, &tmp, o); @@ -689,9 +688,6 @@ static size_t gc_onestep(lua_State *L) lj_str_resize(L, g->str.mask >> 1); /* Shrink string table. */ if (gcref(g->gc.mmudata)) { /* Need any finalizations? */ g->gc.state = GCSfinalize; -#if LJ_HASFFI - g->gc.nocdatafin = 1; -#endif } else { /* Otherwise skip this phase to help the JIT. */ g->gc.state = GCSpause; /* End of GC cycle. */ g->gc.debt = 0; @@ -711,9 +707,6 @@ static size_t gc_onestep(lua_State *L) g->gc.estimate -= GCFINALIZECOST; return GCFINALIZECOST; } -#if LJ_HASFFI - if (!g->gc.nocdatafin) lj_tab_rehash(L, tabref(g->gcroot[GCROOT_FFI_FIN])); -#endif g->gc.state = GCSpause; /* End of GC cycle. */ g->gc.debt = 0; return 0; diff --git a/src/lj_obj.h b/src/lj_obj.h index c0817663..d8b69641 100644 --- a/src/lj_obj.h +++ b/src/lj_obj.h @@ -595,7 +595,7 @@ typedef struct GCState { GCSize threshold; /* Memory threshold. */ uint8_t currentwhite; /* Current white color. */ uint8_t state; /* GC state. */ - uint8_t nocdatafin; /* No cdata finalizer called. */ + uint8_t unused0; #if LJ_64 uint8_t lightudnum; /* Number of lightuserdata segments - 1. */ #else