In the compaction phase of UseParallelOldGC regions may not be processed if
each GC threads does not execute a DrainStacksCompactionTask.
I tried to provoke this bug by putting a sleep into get_task()
after the wait() for worker 0. I release the monitor before
the sleep. I expected this to delay worker 0 long enough
such that all the drain-tasks were taken and executed. That
does seem to have haven't but the bug did not manifest itself.
I think now that the task strealing will take care of regions
that on the stack as long as those regions are stealable.
In the current code base it looks like the local overflow
stacks are not used. In taskqueue.hpp I find
#define USE_RegionTaskQueueWithOverflow
which would preclude the use of an overflow stack.
I'll be investigating this a little more so won't close
this yet but am lowering the priority.