JDK-7131791 : G1: Asserts in nightly testing due to 6976060
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: hs23
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2012-01-20
  • Updated: 2013-10-23
  • Resolved: 2012-03-24
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 7 JDK 8 Other
7u4Fixed 8Fixed hs23Fixed
Description
The nightlies of 2012-01-18 contains 556 new failures related to this fix:

changeset:   2977:9509c20bba28
user:        brutisso
date:        Mon Jan 16 22:10:05 2012 +0100
summary:     6976060: G1: humongous object allocations should initiate marking cycles when necessary

It is a pure G1 issue. The problem is in G1CollectedHeap::attempt_allocation_humongous. Here is the problematic code:

   if (result != NULL) {
      if (g1_policy()->need_to_start_conc_mark("concurrent humongous allocation")) {
        // We need to release the Heap_lock before we try to call collect
        collect(GCCause::_g1_humongous_allocation);
      }
      return result;
    }

The idea is that the call to collect() should start a concurrent marking cycle. This is what it does, but the problem is that it is blocking. Which means that what we have in "result" is a naked oop.

This crashes all over the place. There are so many different tests that I think it will be difficult to list them here. The most common stack traces look like:

#  assert(obj->is_oop_or_null(true )) failed: Error

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x76c2f1]  VMError::report_and_die()+0x1a1;;  VMError::report_and_die()+0x1a1
V  [libjvm.so+0x306d88]  report_vm_error(char const*, int, char const*, char const*)+0x68;;  report_vm_error(char const*, int, char const*, char const*)+0x68
V  [libjvm.so+0x76c12a]  VMError::report(outputStream*)+0x164a;;  VMError::report(outputStream*)+0x164a
V  [libjvm.so+0x76c2f1]  VMError::report_and_die()+0x1a1;;  VMError::report_and_die()+0x1a1
V  [libjvm.so+0x306d88]  report_vm_error(char const*, int, char const*, char const*)+0x68;;  report_vm_error(char const*, int, char const*, char const*)+0x68
V  [libjvm.so+0x3d9bd6]  void G1CMOopClosure::do_oop_nv<oopDesc*>(oopDesc**)+0x176;;  void G1CMOopClosure::do_oop_nv<oopDesc*>(oopDesc**)+0x176
V  [libjvm.so+0x5f30f4]  objArrayKlass::oop_oop_iterate_nv(oopDesc*, G1CMOopClosure*)+0x74;;  objArrayKlass::oop_oop_iterate_nv(oopDesc*, G1CMOopClosure*)+0x74
V  [libjvm.so+0x2bea1b]  CMTask::scan_object(oopDesc*)+0x4b;;  CMTask::scan_object(oopDesc*)+0x4b
V  [libjvm.so+0x2c9acb]  CMBitMapClosure::do_bit(unsigned int)+0xab;;  CMBitMapClosure::do_bit(unsigned int)+0xab
V  [libjvm.so+0x2c225d]  CMTask::do_marking_step(double, bool, bool)+0x9dd;;  CMTask::do_marking_step(double, bool, bool)+0x9dd
V  [libjvm.so+0x2ca328]  CMConcurrentMarkingTask::work(unsigned int)+0x1e8;;  CMConcurrentMarkingTask::work(unsigned int)+0x1e8
V  [libjvm.so+0x7a060b]  GangWorker::loop()+0x30b;;  GangWorker::loop()+0x30b
V  [libjvm.so+0x79e7d8]  GangWorker::run()+0x18;;  GangWorker::run()+0x18
V  [libjvm.so+0x61a5b1]  java_start(Thread*)+0x111;;  _ZL10java_startP6Thread+0x111
C  [libpthread.so.0+0x5832]  abort@@GLIBC_2.0+0x5832


and

#  assert(Universe::heap()->is_in_closed_subset(o)) failed: should be in closed

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x76c2f1]  VMError::report_and_die()+0x1a1;;  VMError::report_and_die()+0x1a1
V  [libjvm.so+0x306d88]  report_vm_error(char const*, int, char const*, char const*)+0x68;;  report_vm_error(char const*, int, char const*, char const*)+0x68
V  [libjvm.so+0x76c12a]  VMError::report(outputStream*)+0x164a;;  VMError::report(outputStream*)+0x164a
V  [libjvm.so+0x76c2f1]  VMError::report_and_die()+0x1a1;;  VMError::report_and_die()+0x1a1
V  [libjvm.so+0x306d88]  report_vm_error(char const*, int, char const*, char const*)+0x68;;  report_vm_error(char const*, int, char const*, char const*)+0x68
V  [libjvm.so+0x3d83f1]  void assert_is_in_closed_subset<oopDesc*>(oopDesc**)+0x41;;  void assert_is_in_closed_subset<oopDesc*>(oopDesc**)+0x41
V  [libjvm.so+0x3c8e09]  instanceKlass::oop_oop_iterate_nv(oopDesc*, FilterOutOfRegionClosure*)+0x79;;  instanceKlass::oop_oop_iterate_nv(oopDesc*, FilterOutOfRegionClosure*)+0x79
V  [libjvm.so+0x3bafa0]  HeapRegion::oops_on_card_seq_iterate_careful(MemRegion, FilterOutOfRegionClosure*, bool, signed char*)+0x470;;  HeapRegion::oops_on_card_seq_iterate_careful(MemRegion, FilterOutOfRegionClosure*, bool, signed char*)+0x470
V  [libjvm.so+0x388daa]  G1RemSet::concurrentRefineOneCard_impl(signed char*, int, bool)+0x22a;;  G1RemSet::concurrentRefineOneCard_impl(signed char*, int, bool)+0x22a
V  [libjvm.so+0x3891f4]  G1RemSet::concurrentRefineOneCard(signed char*, int, bool)+0xa4;;  G1RemSet::concurrentRefineOneCard(signed char*, int, bool)+0xa4
V  [libjvm.so+0x389689]  RefineRecordRefsIntoCSCardTableEntryClosure::do_card_ptr(signed char*, int)+0x59;;  RefineRecordRefsIntoCSCardTableEntryClosure::do_card_ptr(signed char*, int)+0x59
V  [libjvm.so+0x32d9d5]  DirtyCardQueueSet::apply_closure_to_completed_buffer(CardTableEntryClosure*, int, int, bool)+0xb5;;  DirtyCardQueueSet::apply_closure_to_completed_buffer(CardTableEntryClosure*, int, int, bool)+0xb5
V  [libjvm.so+0x35d20c]  G1CollectedHeap::iterate_dirty_card_closure(CardTableEntryClosure*, DirtyCardQueue*, bool, int)+0x4c;;  G1CollectedHeap::iterate_dirty_card_closure(CardTableEntryClosure*, DirtyCardQueue*, bool, int)+0x4c
V  [libjvm.so+0x387db1]  G1RemSet::updateRS(DirtyCardQueue*, int)+0x41;;  G1RemSet::updateRS(DirtyCardQueue*, int)+0x41
V  [libjvm.so+0x3882fc]  G1RemSet::oops_into_collection_set_do(OopsInHeapRegionClosure*, int)+0x25c;;  G1RemSet::oops_into_collection_set_do(OopsInHeapRegionClosure*, int)+0x25c
V  [libjvm.so+0x35f20c]  G1CollectedHeap::g1_process_strong_roots(bool, SharedHeap::ScanningOption, OopClosure*, OopsInHeapRegionClosure*, OopsInGenClosure*, int)+0x2ac;;  G1CollectedHeap::g1_process_strong_roots(bool, SharedHeap::ScanningOption, OopClosure*, OopsInHeapRegionClosure*, OopsInGenClosure*, int)+0x2ac
V  [libjvm.so+0x37798a]  G1ParTask::work(unsigned int)+0x96a;;  G1ParTask::work(unsigned int)+0x96a
V  [libjvm.so+0x7a060b]  GangWorker::loop()+0x30b;;  GangWorker::loop()+0x30b
V  [libjvm.so+0x79e7d8]  GangWorker::run()+0x18;;  GangWorker::run()+0x18
V  [libjvm.so+0x61a5b1]  java_start(Thread*)+0x111;;  _ZL10java_startP6Thread+0x111
C  [libpthread.so.0+0x5832]  abort@@GLIBC_2.0+0x5832

Comments
EVALUATION http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/57025542827f
22-03-2012

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot/rev/57025542827f
20-01-2012