6770608: G1: Mutator thread can flush barrier and satb queues during safepoint

6660573: G1: BigApps Failure : guarantee(satb_mq_set.completed_buffers_num() == 0,"invariant")

When exiting a mutator thread is removed from the thread list before it has a chance to flush its SATB and barrier queues. If GC happens at this moment the objects that are refererred from these queues can be moved, which will case a crash. The fix is simply to flush the buffers before removing a thread from the list.

Reviewed-by: jcoomes, tonyp
This commit is contained in:
Igor Veresov 2008-11-14 14:23:05 -08:00
parent 98685a4d93
commit cbf1c89d60
4 changed files with 58 additions and 29 deletions

View file

@ -793,6 +793,8 @@ class JavaThread: public Thread {
DirtyCardQueue _dirty_card_queue; // Thread-local log for dirty cards.
// Set of all such queues.
static DirtyCardQueueSet _dirty_card_queue_set;
void flush_barrier_queues();
#endif // !SERIALGC
friend class VMThread;