/* Allocate a mark stack if we're doing a major collection.
*/
- if (major_gc) {
+ if (major_gc && oldest_gen->steps[0].mark) {
nat mark_stack_blocks;
mark_stack_blocks = stg_max(MARK_STACK_BLOCKS,
oldest_gen->steps[0].n_old_blocks / 100);
// 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)
// 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();
}