# HG changeset patch # User ysr # Date 1289944728 28800 # Node ID 9eecf81a02fb3f3ee9e7abbab455b704e0ca5b21 # Parent e3e1fb85e50aaec7d7ffb7d95a9d661cffcfd821 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 diff -r e3e1fb85e50a -r 9eecf81a02fb src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Mon Nov 15 16:25:14 2010 -0800 +++ b/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. diff -r e3e1fb85e50a -r 9eecf81a02fb src/share/vm/includeDB_core --- a/src/share/vm/includeDB_core Mon Nov 15 16:25:14 2010 -0800 +++ b/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 diff -r e3e1fb85e50a -r 9eecf81a02fb src/share/vm/memory/universe.cpp --- a/src/share/vm/memory/universe.cpp Mon Nov 15 16:25:14 2010 -0800 +++ b/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; diff -r e3e1fb85e50a -r 9eecf81a02fb src/share/vm/runtime/init.cpp --- a/src/share/vm/runtime/init.cpp Mon Nov 15 16:25:14 2010 -0800 +++ b/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; }