]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
FFI: Drop finalizer table rehash after GC cycle.
authorMike Pall <mike>
Mon, 19 Aug 2024 18:00:21 +0000 (20:00 +0200)
committerMike Pall <mike>
Mon, 19 Aug 2024 18:00:21 +0000 (20:00 +0200)
Reported by Sergey Kaplun. #1247

src/lj_gc.c
src/lj_obj.h

index 69e787065a2bcba3d0d6da42568906a4e51c4f24..bfa4daa8d78c05739a235457a6bd07023f3dda94 100644 (file)
@@ -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;
index c081766357513643b4dd5b390c5d20a0f57dfef9..d8b69641d1223d113ad5cf05f942af225c9712d6 100644 (file)
@@ -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