summaryrefslogtreecommitdiffstats
path: root/lua/lgc.h
diff options
context:
space:
mode:
Diffstat (limited to 'lua/lgc.h')
-rw-r--r--lua/lgc.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/lua/lgc.h b/lua/lgc.h
index bdd5cce..84bb1cd 100644
--- a/lua/lgc.h
+++ b/lua/lgc.h
@@ -1,5 +1,5 @@
/*
-** $Id: lgc.h,v 2.56 2012/05/23 15:43:14 roberto Exp $
+** $Id: lgc.h,v 2.58.1.1 2013/04/12 18:48:47 roberto Exp $
** Garbage Collector
** See Copyright Notice in lua.h
*/
@@ -50,14 +50,24 @@
#define isgenerational(g) ((g)->gckind == KGC_GEN)
/*
-** macro to tell when main invariant (white objects cannot point to black
+** macros to tell when main invariant (white objects cannot point to black
** ones) must be kept. During a non-generational collection, the sweep
** phase may break the invariant, as objects turned white may point to
** still-black objects. The invariant is restored when sweep ends and
** all objects are white again. During a generational collection, the
** invariant must be kept all times.
*/
-#define keepinvariant(g) (isgenerational(g) || g->gcstate <= GCSatomic)
+
+#define keepinvariant(g) (isgenerational(g) || g->gcstate <= GCSatomic)
+
+
+/*
+** Outside the collector, the state in generational mode is kept in
+** 'propagate', so 'keepinvariant' is always true.
+*/
+#define keepinvariantout(g) \
+ check_exp(g->gcstate == GCSpropagate || !isgenerational(g), \
+ g->gcstate <= GCSatomic)
/*