comparison src/share/vm/memory/space.cpp @ 518:0af8b0718fc9

6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark" Summary: The CMS concurrent precleaning and concurrent marking phases should work around classes that are undergoing redefinition. Reviewed-by: ysr, dcubed
author jmasa
date Sun, 11 Jan 2009 16:58:24 -0800
parents e9be0e04635a
children 0fbdb4381b99
comparison
equal deleted inserted replaced
517:e9be0e04635a 518:0af8b0718fc9
567 bool last_was_obj_array = false; 567 bool last_was_obj_array = false;
568 HeapWord *blk_start_addr, *region_start_addr; 568 HeapWord *blk_start_addr, *region_start_addr;
569 if (prev > mr.start()) { 569 if (prev > mr.start()) {
570 region_start_addr = prev; 570 region_start_addr = prev;
571 blk_start_addr = prev; 571 blk_start_addr = prev;
572 assert(blk_start_addr == block_start(region_start_addr), "invariant"); 572 // The previous invocation may have pushed "prev" beyond the
573 // last allocated block yet there may be still be blocks
574 // in this region due to a particular coalescing policy.
575 // Relax the assertion so that the case where the unallocated
576 // block is maintained and "prev" is beyond the unallocated
577 // block does not cause the assertion to fire.
578 assert((BlockOffsetArrayUseUnallocatedBlock &&
579 (!is_in(prev))) ||
580 (blk_start_addr == block_start(region_start_addr)), "invariant");
573 } else { 581 } else {
574 region_start_addr = mr.start(); 582 region_start_addr = mr.start();
575 blk_start_addr = block_start(region_start_addr); 583 blk_start_addr = block_start(region_start_addr);
576 } 584 }
577 HeapWord* region_end_addr = mr.end(); 585 HeapWord* region_end_addr = mr.end();