--- old/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-02-24 12:41:51.563334631 +0100 +++ new/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-02-24 12:41:51.459334633 +0100 @@ -5966,7 +5966,7 @@ void G1CollectedHeap::free_region(HeapRegion* hr, size_t* pre_used, FreeRegionList* free_list, - bool par) { + bool par, bool locked) { assert(!hr->isHumongous(), "this is only for non-humongous regions"); assert(!hr->is_empty(), "the region should not be empty"); assert(free_list != NULL, "pre-condition"); @@ -5978,7 +5978,7 @@ _cg1r->hot_card_cache()->reset_card_counts(hr); } *pre_used += hr->used(); - hr->hr_clear(par, true /* clear_space */); + hr->hr_clear(par, true /* clear_space */, locked); free_list->add_as_head(hr); } @@ -6200,7 +6200,7 @@ } } - rs_lengths += cur->rem_set()->occupied(); + rs_lengths += cur->rem_set()->occupied_locked(); HeapRegion* next = cur->next_in_collection_set(); assert(cur->in_collection_set(), "bad CS"); @@ -6233,7 +6233,7 @@ // And the region is empty. assert(!used_mr.is_empty(), "Should not have empty regions in a CS."); - free_region(cur, &pre_used, &local_free_list, false /* par */); + free_region(cur, &pre_used, &local_free_list, false /* par */, true /* locked */); } else { cur->uninstall_surv_rate_group(); if (cur->is_young()) {