6921317: (partial) G1: assert(top() == bottom() || zfs == Allocated,"Region must be empty, or we must be setting it to
Summary: Extended the failing assertion with the new message format to get more data.
Reviewed-by: tonyp
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu May 13 13:05:47 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri May 14 10:28:46 2010 -0700
@@ -471,21 +471,23 @@
res->zero_fill_state() == HeapRegion::Allocated)),
"Alloc Regions must be zero filled (and non-H)");
}
- if (res != NULL && res->is_empty()) _free_regions--;
- assert(res == NULL ||
- (!res->isHumongous() &&
- (!zero_filled ||
- res->zero_fill_state() == HeapRegion::Allocated)),
- "Non-young alloc Regions must be zero filled (and non-H)");
-
- if (G1PrintHeapRegions) {
- if (res != NULL) {
+ if (res != NULL) {
+ if (res->is_empty()) {
+ _free_regions--;
+ }
+ assert(!res->isHumongous() &&
+ (!zero_filled || res->zero_fill_state() == HeapRegion::Allocated),
+ err_msg("Non-young alloc Regions must be zero filled (and non-H):"
+ " res->isHumongous()=%d, zero_filled=%d, res->zero_fill_state()=%d",
+ res->isHumongous(), zero_filled, res->zero_fill_state()));
+ assert(!res->is_on_unclean_list(),
+ "Alloc Regions must not be on the unclean list");
+ if (G1PrintHeapRegions) {
gclog_or_tty->print_cr("new alloc region %d:["PTR_FORMAT", "PTR_FORMAT"], "
"top "PTR_FORMAT,
res->hrs_index(), res->bottom(), res->end(), res->top());
}
}
-
return res;
}
@@ -4600,6 +4602,15 @@
void
G1CollectedHeap::put_region_on_unclean_list_locked(HeapRegion* r) {
assert(ZF_mon->owned_by_self(), "precondition.");
+#ifdef ASSERT
+ if (r->is_gc_alloc_region()) {
+ ResourceMark rm;
+ stringStream region_str;
+ print_on(®ion_str);
+ assert(!r->is_gc_alloc_region(), err_msg("Unexpected GC allocation region: %s",
+ region_str.as_string()));
+ }
+#endif
_unclean_region_list.insert_before_head(r);
}
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu May 13 13:05:47 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Fri May 14 10:28:46 2010 -0700
@@ -554,11 +554,19 @@
#endif
void HeapRegion::set_zero_fill_state_work(ZeroFillState zfs) {
- assert(top() == bottom() || zfs == Allocated,
- "Region must be empty, or we must be setting it to allocated.");
assert(ZF_mon->owned_by_self() ||
Universe::heap()->is_gc_active(),
"Must hold the lock or be a full GC to modify.");
+#ifdef ASSERT
+ if (top() != bottom() && zfs != Allocated) {
+ ResourceMark rm;
+ stringStream region_str;
+ print_on(®ion_str);
+ assert(top() == bottom() || zfs == Allocated,
+ err_msg("Region must be empty, or we must be setting it to allocated. "
+ "_zfs=%d, zfs=%d, region: %s", _zfs, zfs, region_str.as_string()));
+ }
+#endif
_zfs = zfs;
}