浏览代码

Detail (debugging aid)

When compiling with option HARDMEMTESTS, every creation of a new key
in a table forces an emergency GC.
Roberto Ierusalimschy 6 月之前
父节点
当前提交
1ec251e091
共有 2 个文件被更改,包括 6 次插入4 次删除
  1. 4 4
      lgc.h
  2. 2 0
      ltable.c

+ 4 - 4
lgc.h

@@ -224,15 +224,15 @@
 */
 
 #if !defined(HARDMEMTESTS)
-#define condchangemem(L,pre,pos)	((void)0)
+#define condchangemem(L,pre,pos,emg)	((void)0)
 #else
-#define condchangemem(L,pre,pos)  \
-	{ if (gcrunning(G(L))) { pre; luaC_fullgc(L, 0); pos; } }
+#define condchangemem(L,pre,pos,emg)  \
+	{ if (gcrunning(G(L))) { pre; luaC_fullgc(L, emg); pos; } }
 #endif
 
 #define luaC_condGC(L,pre,pos) \
 	{ if (G(L)->GCdebt <= 0) { pre; luaC_step(L); pos;}; \
-	  condchangemem(L,pre,pos); }
+	  condchangemem(L,pre,pos,0); }
 
 /* more often than not, 'pre'/'pos' are empty */
 #define luaC_checkGC(L)		luaC_condGC(L,(void)0,(void)0)

+ 2 - 0
ltable.c

@@ -910,6 +910,8 @@ static void luaH_newkey (lua_State *L, Table *t, const TValue *key,
       newcheckedkey(t, key, value);  /* insert key in grown table */
     }
     luaC_barrierback(L, obj2gco(t), key);
+    /* for debugging only: any new key may force an emergency collection */
+    condchangemem(L, (void)0, (void)0, 1);
   }
 }