I'm trying to understand the Concurrent Mark Sweep (ConcMS) collector.
In this collector, the mutators are stopped for stack-scanning at the beginning of the concurrent gc, and should be resumed before the heap is actually traversed (marking phase).
However, I'm not sure where (and how) the mutators are actually resumed.

Looking at the Phases of the algorithm, I'm not sure where step 3 happen.
1. stop the mutators (Phase:prepare-stacks, handled by VM.collection.prepareMutator)
2. scan stacks       (Phase:stacks, handled by VM.scanning.computeThreadsRoots)
3. resume mutators  (at which phase this is done???)
4. Compute the transitive closure over the heap (Phase:concurrent-closure, handled by Plan.controlCollectorContext.requestConcurrentCollection).

Can you please point me at which phase the mutators are resumed, or which function handles it?

Nachshon Cohen
Department of computer science,
Technion institute of technology, Israel.