mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
The CMS concurrent precleaning and concurrent marking phases should work around classes that are undergoing redefinition. Reviewed-by: ysr, dcubed
This commit is contained in:
parent
3474623106
commit
c2ff9781c7
18 changed files with 161 additions and 19 deletions
|
@ -25,7 +25,7 @@
|
|||
# include "incls/_precompiled.incl"
|
||||
# include "incls/_constantPoolKlass.cpp.incl"
|
||||
|
||||
constantPoolOop constantPoolKlass::allocate(int length, TRAPS) {
|
||||
constantPoolOop constantPoolKlass::allocate(int length, bool is_conc_safe, TRAPS) {
|
||||
int size = constantPoolOopDesc::object_size(length);
|
||||
KlassHandle klass (THREAD, as_klassOop());
|
||||
constantPoolOop c =
|
||||
|
@ -38,6 +38,9 @@ constantPoolOop constantPoolKlass::allocate(int length, TRAPS) {
|
|||
c->set_flags(0);
|
||||
// only set to non-zero if constant pool is merged by RedefineClasses
|
||||
c->set_orig_length(0);
|
||||
// if constant pool may change during RedefineClasses, it is created
|
||||
// unsafe for GC concurrent processing.
|
||||
c->set_is_conc_safe(is_conc_safe);
|
||||
// all fields are initialized; needed for GC
|
||||
|
||||
// initialize tag array
|
||||
|
@ -207,6 +210,11 @@ int constantPoolKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr)
|
|||
return size;
|
||||
}
|
||||
|
||||
bool constantPoolKlass::oop_is_conc_safe(oop obj) const {
|
||||
assert(obj->is_constantPool(), "must be constantPool");
|
||||
return constantPoolOop(obj)->is_conc_safe();
|
||||
}
|
||||
|
||||
#ifndef SERIALGC
|
||||
int constantPoolKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
|
||||
assert (obj->is_constantPool(), "obj must be constant pool");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue