From a654e46ad3beb0b6fa128a7197fa732f9137c378 Mon Sep 17 00:00:00 2001 From: xlu Date: Thu, 24 Sep 2009 12:10:46 -0700 Subject: [PATCH] 6880029: JDK 1.6.0_u14p Application crashed very early Reviewed-by: never, ysr, acorn --- src/share/vm/runtime/safepoint.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/share/vm/runtime/safepoint.cpp b/src/share/vm/runtime/safepoint.cpp index bbe60732c..04a5240d7 100644 --- a/src/share/vm/runtime/safepoint.cpp +++ b/src/share/vm/runtime/safepoint.cpp @@ -81,6 +81,14 @@ void SafepointSynchronize::begin() { jlong safepoint_limit_time; timeout_error_printed = false; + // PrintSafepointStatisticsTimeout can be specified separately. When + // specified, PrintSafepointStatistics will be set to true in + // deferred_initialize_stat method. The initialization has to be done + // early enough to avoid any races. See bug 6880029 for details. + if (PrintSafepointStatistics || PrintSafepointStatisticsTimeout > 0) { + deferred_initialize_stat(); + } + // Begin the process of bringing the system to a safepoint. // Java threads can be in several different states and are // stopped by different mechanisms: @@ -169,8 +177,7 @@ void SafepointSynchronize::begin() { } } - if ( (PrintSafepointStatistics || (PrintSafepointStatisticsTimeout > 0)) - && iterations == 0) { + if (PrintSafepointStatistics && iterations == 0) { begin_statistics(nof_threads, still_running); } @@ -1026,8 +1033,7 @@ void SafepointSynchronize::deferred_initialize_stat() { } void SafepointSynchronize::begin_statistics(int nof_threads, int nof_running) { - deferred_initialize_stat(); - + assert(init_done, "safepoint statistics array hasn't been initialized"); SafepointStats *spstat = &_safepoint_stats[_cur_stat_index]; VM_Operation *op = VMThread::vm_operation(); -- GitLab