JDK-6208009 : VTest crashed on B15 after 15 hours on jtg-win19 with mustang b15
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 1.4.2_05,1.4.2_07,6
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux,solaris,solaris_8
  • CPU: x86,sparc
  • Submitted: 2004-12-14
  • Updated: 2010-05-10
  • Resolved: 2005-04-27
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 6
6Resolved
Related Reports
Duplicate :  
Duplicate :  
Description
VTest crashed after 15 hours on on jtg-win19 with mustang b15. 
Looks like the crash was in GC.

Test machine: jtg-win19.sfbay 
[root@jtg-win19 root]# uname -a
Linux jtg-win19.SFBay.Sun.COM 2.4.21-19.ELsmp #1 SMP Thu Aug 12 23:26:16 EDT 2004 i686 i686 i386 GNU/Linux

JVM flags: "-server -XX:CompileThreshold=100 -XX:+UseParallelGC"

java version "1.6.0-ea"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.6.0-ea-b15)
Java HotSpot(TM) Client VM (build 1.6.0-ea-b15, mixed mode, sharing)

[root@jtg-win19 VolanoTestrun.3064.-server]# pwd
/bt/VolanoTestrun.3064.-server
[root@jtg-win19 VolanoTestrun.3064.-server]# tail run.vtest.out
Unexpected Error
------------------------------------------------------------------------------
SIGSEGV (0xb) at pc=0xb6f33700, pid=12406, tid=2778684336


To debug, run 'gdb /proc/12406/exe 12406'; then switch to thread -1516282960
Enter 'yes' to launch gdb automatically (PATH must include gdb)
Otherwise, press RETURN to abort...

(gdb) thread 414
[Switching to thread 414 (Thread -1516282960 (LWP 12407))]#0  0xb75305bc
in __nanosleep_nocancel () from /lib/tls/libc.so.6
(gdb) where
#0  0xb75305bc in __nanosleep_nocancel () from /lib/tls/libc.so.6
#1  0xb75303df in sleep () from /lib/tls/libc.so.6
#2  0xb6efa02c in os::message_box ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#3  0xb6fc0686 in VMError::show_message_box ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#4  0xb6fc034a in VMError::report_and_die ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#5  0xb6efb87d in JVM_handle_linux_signal ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#6  0xb6ef8f94 in signalHandler () from
/usr/j2se/jre/lib/i386/server/libjvm.so
#7  <signal handler called>
#8  0xb6f33700 in PSPromotionManager::copy_to_survivor_space ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#9  0xb6d403bc in instanceKlass::oop_copy_contents ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#10 0xb6c50069 in CardTableExtension::scavenge_contents_parallel ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#11 0xb6f35929 in OldToYoungRootsTask::do_it ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#12 0xb6d0987f in GCTaskThread::run ()
   from /usr/j2se/jre/lib/i386/server/libjvm.so
#13 0xb6efa9a8 in _start () from /usr/j2se/jre/lib/i386/server/libjvm.so
---Type <return> to continue, or q <return> to quit---
#14 0xb75c6dec in start_thread () from /lib/tls/libpthread.so.0
#15 0xb7562f7a in clone () from /lib/tls/libc.so.6

###@###.### 2004-12-14 01:35:53 GMT
###@###.### 2004-12-14 01:52:47 GMT

Comments
EVALUATION See the comments and suggested fix. The problem is a missing card mark after cards scanning for old-to-young references. ###@###.### 2005-03-17 18:55:04 GMT For process reasons, we have updated 6181110 and 6208009 (this bug) so that 6208009 is now a duplicate of 6181110 (rather than vice-versa). As a result we have transferred the values of "fixed in" and "delievered in" from 6208009 to 6181110. [This was done so as to allow smooth handling of escalations and related subCR's associated with 6181110; contact ###@###.### and ###@###.### if you have any questions.] ###@###.### 2005-04-27 00:42:21 GMT
14-12-2004

SUGGESTED FIX ------- cardTableExtension.cpp ------- 2c2 < #pragma ident "@(#)cardTableExtension.cpp 1.26 05/01/08 11:26:41 JVM" --- > #pragma ident "@(#)cardTableExtension.cpp 1.27 05/03/17 06:37:17 JVM" 221a222 > debug_only(oop* first_object_within_slice = (oop*) first_object;) 223a225 > debug_only(first_object_within_slice = last_scanned;) 273c275 < if (ending_card_of_last_object > (current_card+1)) { --- > if (ending_card_of_last_object > current_card) { 284a287,296 > // "p" should always be >= "last_scanned" because newly GC dirtied > // cards are no longer scanned again (see comment at end > // of loop on the increment of "current_card"). Test that > // hypothesis before removing this code. > // If this code is removed, deal with the first time through > // the loop when the last_scanned is the object starting in > // the previous slice. > assert((p >= last_scanned) || > (last_scanned == first_object_within_slice), > "Should no longer be possible"); 329a342,353 > // "current_card" is still the "following_clean_card" or > // the current_card is >= the worker_end_card so the > // loop will not execute again. > assert((current_card == following_clean_card) || > (current_card >= worker_end_card), > "current_card should only be incremented if it still equals " > "following_clean_card"); > // Increment current_card so that it is not processed again. > // It may now be dirty because a old-to-young pointer was > // found on it an updated. If it is now dirty, it cannot be > // be safely cleaned in the next iteration. > current_card++; ###@###.### 2005-03-17 18:55:04 GMT
14-12-2004