Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/ptrQueue.hpp @ 441:da9cb4e97a5f
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")
Summary: 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
author | iveresov |
---|---|
date | Fri, 14 Nov 2008 14:23:05 -0800 |
parents | 37f87013dfd8 |
children | ad8c8ca4ab0f |
comparison
equal
deleted
inserted
replaced
440:96c6da8f095c | 441:da9cb4e97a5f |
---|---|
60 public: | 60 public: |
61 // Initialize this queue to contain a null buffer, and be part of the | 61 // Initialize this queue to contain a null buffer, and be part of the |
62 // given PtrQueueSet. | 62 // given PtrQueueSet. |
63 PtrQueue(PtrQueueSet*, bool perm = false); | 63 PtrQueue(PtrQueueSet*, bool perm = false); |
64 // Release any contained resources. | 64 // Release any contained resources. |
65 ~PtrQueue(); | 65 void flush(); |
66 // Calls flush() when destroyed. | |
67 ~PtrQueue() { flush(); } | |
66 | 68 |
67 // Associate a lock with a ptr queue. | 69 // Associate a lock with a ptr queue. |
68 void set_lock(Mutex* lock) { _lock = lock; } | 70 void set_lock(Mutex* lock) { _lock = lock; } |
69 | 71 |
70 void reset() { if (_buf != NULL) _index = _sz; } | 72 void reset() { if (_buf != NULL) _index = _sz; } |