Mercurial > hg > graal-jvmci-8
diff src/share/vm/oops/constantPoolKlass.cpp @ 2226:c5a923563727
6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
Summary: Fix block_size_if_printezis_bits() so it does not expect the bits, only uses them when available. Fix block_size_no_stall() so it does not stall when the bits are missing such cases, letting the caller deal with zero size returns. Constant pool cache oops do not need to be unparsable or conc_unsafe after their klass pointer is installed. Some cosmetic clean-ups and some assertion checking for conc-usafety which, in the presence of class file redefinition, has no a-priori time boundedness, so all GCs must be able to safely deal with putatively conc-unsafe objects in a stop-world pause.
Reviewed-by: jmasa, johnc
author | ysr |
---|---|
date | Mon, 07 Feb 2011 22:19:57 -0800 |
parents | 3582bf76420e |
children | e5383553fd4e |
line wrap: on
line diff
--- a/src/share/vm/oops/constantPoolKlass.cpp Thu Feb 03 20:49:09 2011 -0800 +++ b/src/share/vm/oops/constantPoolKlass.cpp Mon Feb 07 22:19:57 2011 -0800 @@ -71,6 +71,12 @@ c->set_is_conc_safe(is_conc_safe); // all fields are initialized; needed for GC + // Note: because we may be in this "conc_unsafe" state when allocating + // t_oop below, which may in turn cause a GC, it is imperative that our + // size be correct, consistent and henceforth stable, at this stage. + assert(c->is_parsable(), "Else size() below is unreliable"); + DEBUG_ONLY(int sz = c->size();) + // initialize tag array // Note: cannot introduce constant pool handle before since it is not // completely initialized (no class) -> would cause assertion failure @@ -82,6 +88,8 @@ } pool->set_tags(tags()); + // Check that our size was stable at its old value. + assert(sz == c->size(), "size() changed"); return pool(); }