6718086: CMS assert: _concurrent_iteration_safe_limit update missed
authorysr
Mon, 23 Jun 2008 16:49:37 -0700
changeset 1379 ccfaefa561cd
parent 1378 e94c42fe8a0f
child 1380 c6ace647ca84
6718086: CMS assert: _concurrent_iteration_safe_limit update missed Summary: Initialize the field correctly in ContiguousSpace's constructor and initialize() methods, using the latter for the survivor spaces upon initial construction or a subsequent resizing of the young generation. Add some missing Space sub-class constructors. Reviewed-by: apetrusenko
hotspot/src/share/vm/memory/defNewGeneration.cpp
hotspot/src/share/vm/memory/space.cpp
hotspot/src/share/vm/memory/space.hpp
--- a/hotspot/src/share/vm/memory/defNewGeneration.cpp	Tue Jun 17 08:40:48 2008 -0700
+++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp	Mon Jun 23 16:49:37 2008 -0700
@@ -227,8 +227,8 @@
       eden()->mangle_unused_area();
     }
   }
-  from()->set_bounds(fromMR); from()->clear();
-    to()->set_bounds(toMR);     to()->clear();
+  from()->initialize(fromMR, true /* clear */);
+    to()->initialize(  toMR, true /* clear */);
   // Make sure we compact eden, then from.
   // The to-space is normally empty before a compaction so need
   // not be considered.  The exception is during promotion
--- a/hotspot/src/share/vm/memory/space.cpp	Tue Jun 17 08:40:48 2008 -0700
+++ b/hotspot/src/share/vm/memory/space.cpp	Mon Jun 23 16:49:37 2008 -0700
@@ -276,6 +276,7 @@
   set_top(bottom());
   set_saved_mark();
   if (clear_space) clear();
+  set_concurrent_iteration_safe_limit(top());
 }
 
 void ContiguousSpace::clear() {
--- a/hotspot/src/share/vm/memory/space.hpp	Tue Jun 17 08:40:48 2008 -0700
+++ b/hotspot/src/share/vm/memory/space.hpp	Mon Jun 23 16:49:37 2008 -0700
@@ -373,6 +373,9 @@
   CompactibleSpace* _next_compaction_space;
 
 public:
+  CompactibleSpace() :
+   _compaction_top(NULL), _next_compaction_space(NULL) {}
+
   virtual void initialize(MemRegion mr, bool clear_space);
   virtual void clear();
 
@@ -766,6 +769,10 @@
   inline HeapWord* par_allocate_impl(size_t word_size, HeapWord* end_value);
 
  public:
+  ContiguousSpace() :
+    _top(NULL),
+    _concurrent_iteration_safe_limit(NULL) {}
+
   virtual void initialize(MemRegion mr, bool clear_space);
 
   // Accessors
@@ -970,7 +977,8 @@
   HeapWord* _soft_end;
 
  public:
-  EdenSpace(DefNewGeneration* gen) : _gen(gen) { _soft_end = NULL; }
+  EdenSpace(DefNewGeneration* gen) :
+   _gen(gen), _soft_end(NULL) {}
 
   // Get/set just the 'soft' limit.
   HeapWord* soft_end()               { return _soft_end; }