Mercurial > hg > truffle
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(); |