summaryrefslogtreecommitdiff
path: root/mark_rts.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2021-08-25 22:01:18 +0300
committerIvan Maidanski <ivmai@mail.ru>2021-08-25 22:03:26 +0300
commit2bae6c818e4e61dd9f62fdffc0cc1621a5ba40a9 (patch)
tree6d5a0849384e30e02b52a22ea4af986c9a8eaaf0 /mark_rts.c
parent96b3820d592f9f6b12ac830ee3ac59610d625532 (diff)
downloadbdwgc-2bae6c818e4e61dd9f62fdffc0cc1621a5ba40a9.tar.gz
Do not call GC_push_conditional unless PROC_VDB
As of now, only PROC_VDB can determine whether a static root page is dirty. Thus, GC_push_all could be used (instead of GC_push_conditional) in mark_rts.c for other VDB implementations. * include/private/gcconfig.h [!PROC_VDB] (NO_VDB_FOR_STATIC_ROOTS): New macro; add comment. * mark_rts.c (GC_PUSH_CONDITIONAL_STATIC): New internal macro; move comment from GC_PUSH_CONDITIONAL; mark "all" argument as used. * mark_rts.c (GC_PUSH_CONDITIONAL): Use GC_PUSH_CONDITIONAL_STATIC(); do not test GC_DISABLE_INCREMENTAL directly. * mark_rts.c (GC_push_conditional_with_exclusions): Remove GC_ATTR_UNUSED for "all" argument.
Diffstat (limited to 'mark_rts.c')
-rw-r--r--mark_rts.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/mark_rts.c b/mark_rts.c
index 6a576681..3a115508 100644
--- a/mark_rts.c
+++ b/mark_rts.c
@@ -615,22 +615,27 @@ GC_API void GC_CALL GC_exclude_static_roots(void *b, void *e)
UNLOCK();
}
+#ifdef NO_VDB_FOR_STATIC_ROOTS
+# define GC_PUSH_CONDITIONAL_STATIC(b, t, all) \
+ ((void)(all), GC_push_all(b, t))
+#else
+# define GC_PUSH_CONDITIONAL_STATIC(b, t, all) GC_push_conditional(b, t, all)
+ /* Do either of GC_push_all or GC_push_selected */
+ /* depending on the third arg. */
+#endif
+
#if defined(WRAP_MARK_SOME) && defined(PARALLEL_MARK)
# define GC_PUSH_CONDITIONAL(b, t, all) \
(GC_parallel \
? GC_push_conditional_eager(b, t, all) \
- : GC_push_conditional(b, t, all))
-#elif defined(GC_DISABLE_INCREMENTAL)
-# define GC_PUSH_CONDITIONAL(b, t, all) GC_push_all(b, t)
+ : GC_PUSH_CONDITIONAL_STATIC(b, t, all))
#else
-# define GC_PUSH_CONDITIONAL(b, t, all) GC_push_conditional(b, t, all)
- /* Do either of GC_push_all or GC_push_selected */
- /* depending on the third arg. */
+# define GC_PUSH_CONDITIONAL(b, t, all) GC_PUSH_CONDITIONAL_STATIC(b, t, all)
#endif
/* Invoke push_conditional on ranges that are not excluded. */
STATIC void GC_push_conditional_with_exclusions(ptr_t bottom, ptr_t top,
- GC_bool all GC_ATTR_UNUSED)
+ GC_bool all)
{
while ((word)bottom < (word)top) {
struct exclusion *next = GC_next_exclusion(bottom);