projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
disable a false assertion, add a comment to explain why
[ghc-hetmet.git]
/
rts
/
sm
/
Scav.c
diff --git
a/rts/sm/Scav.c
b/rts/sm/Scav.c
index
e9127ac
..
466b9b4
100644
(file)
--- a/
rts/sm/Scav.c
+++ b/
rts/sm/Scav.c
@@
-36,7
+36,6
@@
static void scavenge_large_bitmap (StgPtr p,
#if defined(THREADED_RTS) && !defined(PARALLEL_GC)
# define evacuate(a) evacuate1(a)
#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)
# 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)
@@
-1491,9
+1490,11
@@
scavenge_mutable_list(bdescr *bd, generation *gen)
case TSO: {
StgTSO *tso = (StgTSO *)p;
if (tso->dirty == 0) {
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) {
scavenge_TSO_link(tso);
if (gct->failed_to_evac) {