#if defined(THREADED_RTS) && !defined(PARALLEL_GC)
# define evacuate(a) evacuate1(a)
-# define recordMutableGen_GC(a,b) recordMutableGen(a,b)
# define scavenge_loop(a) scavenge_loop1(a)
# define scavenge_block(a) scavenge_block1(a)
# define scavenge_mutable_list(bd,g) scavenge_mutable_list1(bd,g)
case TSO: {
StgTSO *tso = (StgTSO *)p;
if (tso->dirty == 0) {
- // Must be on the mutable list because its link
- // field is dirty.
- ASSERT(tso->flags & TSO_LINK_DIRTY);
+ // Should be on the mutable list because its link
+ // field is dirty. However, in parallel GC we may
+ // have a thread on multiple mutable lists, so
+ // this assertion would be invalid:
+ // ASSERT(tso->flags & TSO_LINK_DIRTY);
scavenge_TSO_link(tso);
if (gct->failed_to_evac) {