projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
traverse the spark pools only once during GC rather than twice
[ghc-hetmet.git]
/
rts
/
sm
/
GC.c
diff --git
a/rts/sm/GC.c
b/rts/sm/GC.c
index
f8a0980
..
5cd1298
100644
(file)
--- a/
rts/sm/GC.c
+++ b/
rts/sm/GC.c
@@
-268,8
+268,9
@@
GarbageCollect ( rtsBool force_major_gc )
memInventory(traceClass(DEBUG_gc));
#endif
memInventory(traceClass(DEBUG_gc));
#endif
- // check stack sanity *before* GC (ToDo: check all threads)
+ // check stack sanity *before* GC
IF_DEBUG(sanity, checkFreeListSanity());
IF_DEBUG(sanity, checkFreeListSanity());
+ IF_DEBUG(sanity, checkMutableLists());
// Initialise all our gc_thread structures
for (t = 0; t < n_gc_threads; t++) {
// Initialise all our gc_thread structures
for (t = 0; t < n_gc_threads; t++) {
@@
-334,7
+335,8
@@
GarbageCollect ( rtsBool force_major_gc )
// follow all the roots that the application knows about.
gct->evac_step = 0;
// follow all the roots that the application knows about.
gct->evac_step = 0;
- markSomeCapabilities(mark_root, gct, gct->thread_index, n_gc_threads);
+ markSomeCapabilities(mark_root, gct, gct->thread_index, n_gc_threads,
+ rtsTrue/*prune sparks*/);
#if defined(RTS_USER_SIGNALS)
// mark the signal handlers (signals should be already blocked)
#if defined(RTS_USER_SIGNALS)
// mark the signal handlers (signals should be already blocked)
@@
-1003,7
+1005,8
@@
gc_thread_work (void)
// Every thread evacuates some roots.
gct->evac_step = 0;
// Every thread evacuates some roots.
gct->evac_step = 0;
- markSomeCapabilities(mark_root, gct, gct->thread_index, n_gc_threads);
+ markSomeCapabilities(mark_root, gct, gct->thread_index, n_gc_threads,
+ rtsTrue/*prune sparks*/);
scavenge_until_all_done();
}
scavenge_until_all_done();
}