United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: 6710665 G1: guarantee(_cm->out_of_regions() && _cm->region_stack_empty() && _task_queue->size() == 0, ...)
6710665 : G1: guarantee(_cm->out_of_regions() && _cm->region_stack_empty() && _task_queue->size() == 0, ...)

Details
Type:
Bug
Submit Date:
2008-06-04
Status:
Resolved
Updated Date:
2010-04-03
Project Name:
JDK
Resolved Date:
2008-10-07
Component:
hotspot
OS:
generic
Sub-Component:
gc
CPU:
generic
Priority:
P4
Resolution:
Fixed
Affected Versions:
7
Fixed Versions:
hs14

Related Reports
Backport:
Backport:

Sub Tasks

Description
G1 failed the guarantee while running GCBasher on T2000.

At concurrentMark.cpp:3783
Error: guarantee(_cm->out_of_regions() && _cm->region_stack_empty() && _task_queue->size() == 0,"only way to reach here")

                                    

Comments
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/afc1ce1efe66
                                     
2008-08-28
SUGGESTED FIX

The fix is to remove the guarantees as they are too strong.

Here's an alternative that we might want to look at in the future. If we wanted to skip the push on the region stack, we could introduce a CM task-local region entry and store the last entry there instead pushing it on the stack there. When the CM task restarts, we have to make sure that we check that entry first before we pop any more entries from the region stack. This way we can leave the guarantees in.
                                     
2008-06-06
EVALUATION

_cm->region_stack_empty() can become not empty again because if some thread in aborting in CMTask::drain_region_stack() it will push a partially done region back.
                                     
2008-06-05



Hardware and Software, Engineered to Work Together