7000578: CMS: assert(SafepointSynchronize::is_at_safepoint()) failed: Else races are possible
authorysr
Tue, 16 Nov 2010 13:58:48 -0800
changeset 7384 71eebb634028
parent 7379 3a5f95d621bd
child 7386 fa48bd103873
7000578: CMS: assert(SafepointSynchronize::is_at_safepoint()) failed: Else races are possible Summary: Weakened assert in onj_is_alive() to allow its use at initialization time when is_at_safepoint() normally reports false; added some related asserts to check order of is_init_completed() after Universe::is_fully_initialized(). Reviewed-by: jcoomes
hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
hotspot/src/share/vm/includeDB_core
hotspot/src/share/vm/memory/universe.cpp
hotspot/src/share/vm/runtime/init.cpp
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp	Mon Nov 15 16:25:14 2010 -0800
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp	Tue Nov 16 13:58:48 2010 -0800
@@ -1093,8 +1093,9 @@
 // perm_gen_verify_bit_map where we store the "deadness" information if
 // we did not sweep the perm gen in the most recent previous GC cycle.
 bool CompactibleFreeListSpace::obj_is_alive(const HeapWord* p) const {
+  assert(SafepointSynchronize::is_at_safepoint() || !is_init_completed(),
+         "Else races are possible");
   assert(block_is_obj(p), "The address should point to an object");
-  assert(SafepointSynchronize::is_at_safepoint(), "Else races are possible");
 
   // If we're sweeping, we use object liveness information from the main bit map
   // for both perm gen and old gen.
--- a/hotspot/src/share/vm/includeDB_core	Mon Nov 15 16:25:14 2010 -0800
+++ b/hotspot/src/share/vm/includeDB_core	Tue Nov 16 13:58:48 2010 -0800
@@ -4454,6 +4454,7 @@
 universe.cpp                            generation.hpp
 universe.cpp                            handles.inline.hpp
 universe.cpp                            hashtable.inline.hpp
+universe.cpp                            init.hpp
 universe.cpp                            instanceKlass.hpp
 universe.cpp                            instanceKlassKlass.hpp
 universe.cpp                            instanceRefKlass.hpp
--- a/hotspot/src/share/vm/memory/universe.cpp	Mon Nov 15 16:25:14 2010 -0800
+++ b/hotspot/src/share/vm/memory/universe.cpp	Tue Nov 16 13:58:48 2010 -0800
@@ -945,6 +945,7 @@
 extern void initialize_converter_functions();
 
 bool universe_post_init() {
+  assert(!is_init_completed(), "Error: initialization not yet completed!");
   Universe::_fully_initialized = true;
   EXCEPTION_MARK;
   { ResourceMark rm;
--- a/hotspot/src/share/vm/runtime/init.cpp	Mon Nov 15 16:25:14 2010 -0800
+++ b/hotspot/src/share/vm/runtime/init.cpp	Tue Nov 16 13:58:48 2010 -0800
@@ -160,5 +160,6 @@
 
 
 void set_init_completed() {
+  assert(Universe::is_fully_initialized(), "Should have completed initialization");
   _init_completed = true;
 }