[K/N] Fix a race on mark queue destruction in CMS GC
Merge-request: KT-MR-14076
This commit is contained in:
committed by
Space Team
parent
fb7176d5fa
commit
651f068e06
@@ -78,11 +78,9 @@ void gc::mark::ConcurrentMark::runMainInSTW() {
|
||||
}
|
||||
} while (!tryTerminateMark(everSharedBatches));
|
||||
|
||||
for (auto& thread : *lockedMutatorsList_) {
|
||||
thread.gc().impl().gc().mark().markQueue().destroy();
|
||||
}
|
||||
|
||||
endMarkingEpoch();
|
||||
// By this point mutator mark queues may not be populated anymore.
|
||||
// However, some threads may still try to enqueue a marked object, before they observe the barrier disablement.
|
||||
// Thus, mark queue destruction takes place only later below.
|
||||
|
||||
gc::processWeaks<DefaultProcessWeaksTraits>(gcHandle(), mm::SpecialRefRegistry::instance());
|
||||
|
||||
@@ -94,6 +92,11 @@ void gc::mark::ConcurrentMark::runMainInSTW() {
|
||||
}
|
||||
|
||||
barriers::disableBarriers();
|
||||
|
||||
for (auto& thread : *lockedMutatorsList_) {
|
||||
thread.gc().impl().gc().mark().markQueue().destroy();
|
||||
}
|
||||
endMarkingEpoch();
|
||||
}
|
||||
|
||||
void gc::mark::ConcurrentMark::runOnMutator(mm::ThreadData&) {
|
||||
|
||||
Reference in New Issue
Block a user