# HG changeset patch # User apetrusenko # Date 1273858126 25200 # Node ID cc387008223e520995db89ed6b49b6c4fa99f46a # Parent 8bfe9058ca4661779ac1d0572329f3943e68362e 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 diff -r 8bfe9058ca46 -r cc387008223e src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu May 13 13:05:47 2010 -0700 +++ b/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); } diff -r 8bfe9058ca46 -r cc387008223e src/share/vm/gc_implementation/g1/heapRegion.cpp --- a/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu May 13 13:05:47 2010 -0700 +++ b/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; }