OpenJDK / portola / portola
changeset 54513:c914170817d4
8221853: Data race in compile broker (set_last_compile)
Summary: Remove the debug code provoking it
Reviewed-by: kvn, thartmann
author | jcbeyler |
---|---|
date | Tue, 09 Apr 2019 19:34:05 -0700 |
parents | f847a42ddc01 |
children | 72f05350b4b3 |
files | src/hotspot/share/compiler/compileBroker.cpp src/hotspot/share/compiler/compileBroker.hpp |
diffstat | 2 files changed, 30 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/src/hotspot/share/compiler/compileBroker.cpp Tue Apr 09 16:32:22 2019 -0700 +++ b/src/hotspot/share/compiler/compileBroker.cpp Tue Apr 09 19:34:05 2019 -0700 @@ -135,11 +135,6 @@ volatile jint CompileBroker::_compilation_id = 0; volatile jint CompileBroker::_osr_compilation_id = 0; -// Debugging information -int CompileBroker::_last_compile_type = no_compile; -int CompileBroker::_last_compile_level = CompLevel_none; -char CompileBroker::_last_method_compiled[CompileBroker::name_buffer_length]; - // Performance counters PerfCounter* CompileBroker::_perf_total_compilation = NULL; PerfCounter* CompileBroker::_perf_osr_compilation = NULL; @@ -577,8 +572,6 @@ // // Initialize the Compilation object void CompileBroker::compilation_init_phase1(TRAPS) { - _last_method_compiled[0] = '\0'; - // No need to initialize compilation system if we do not use it. if (!UseCompiler) { return; @@ -2032,8 +2025,10 @@ // Look up matching directives directive = DirectivesStack::getMatchingDirective(method, comp); - // Save information about this method in case of failure. - set_last_compile(thread, method, is_osr, task_level); + // Update compile information when using perfdata. + if (UsePerfData) { + update_compile_perf_data(thread, method, is_osr); + } DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, compiler_name(task_level)); } @@ -2264,58 +2259,49 @@ } // ------------------------------------------------------------------ -// CompileBroker::set_last_compile +// CompileBroker::update_compile_perf_data // // Record this compilation for debugging purposes. -void CompileBroker::set_last_compile(CompilerThread* thread, const methodHandle& method, bool is_osr, int comp_level) { +void CompileBroker::update_compile_perf_data(CompilerThread* thread, const methodHandle& method, bool is_osr) { ResourceMark rm; char* method_name = method->name()->as_C_string(); - strncpy(_last_method_compiled, method_name, CompileBroker::name_buffer_length); - _last_method_compiled[CompileBroker::name_buffer_length - 1] = '\0'; // ensure null terminated char current_method[CompilerCounters::cmname_buffer_length]; size_t maxLen = CompilerCounters::cmname_buffer_length; - if (UsePerfData) { - const char* class_name = method->method_holder()->name()->as_C_string(); + const char* class_name = method->method_holder()->name()->as_C_string(); - size_t s1len = strlen(class_name); - size_t s2len = strlen(method_name); + size_t s1len = strlen(class_name); + size_t s2len = strlen(method_name); - // check if we need to truncate the string - if (s1len + s2len + 2 > maxLen) { + // check if we need to truncate the string + if (s1len + s2len + 2 > maxLen) { - // the strategy is to lop off the leading characters of the - // class name and the trailing characters of the method name. + // the strategy is to lop off the leading characters of the + // class name and the trailing characters of the method name. - if (s2len + 2 > maxLen) { - // lop of the entire class name string, let snprintf handle - // truncation of the method name. - class_name += s1len; // null string - } - else { - // lop off the extra characters from the front of the class name - class_name += ((s1len + s2len + 2) - maxLen); - } + if (s2len + 2 > maxLen) { + // lop of the entire class name string, let snprintf handle + // truncation of the method name. + class_name += s1len; // null string } - - jio_snprintf(current_method, maxLen, "%s %s", class_name, method_name); + else { + // lop off the extra characters from the front of the class name + class_name += ((s1len + s2len + 2) - maxLen); + } } + jio_snprintf(current_method, maxLen, "%s %s", class_name, method_name); + + int last_compile_type = normal_compile; if (CICountOSR && is_osr) { - _last_compile_type = osr_compile; - } else { - _last_compile_type = normal_compile; + last_compile_type = osr_compile; } - _last_compile_level = comp_level; - if (UsePerfData) { - CompilerCounters* counters = thread->counters(); - counters->set_current_method(current_method); - counters->set_compile_type((jlong)_last_compile_type); - } + CompilerCounters* counters = thread->counters(); + counters->set_current_method(current_method); + counters->set_compile_type((jlong) last_compile_type); } - // ------------------------------------------------------------------ // CompileBroker::push_jni_handle_block // @@ -2618,21 +2604,6 @@ tty->print_cr(" nmethod total size : %8d bytes", nmethods_size); } -// Debugging output for failure -void CompileBroker::print_last_compile() { - if (_last_compile_level != CompLevel_none && - compiler(_last_compile_level) != NULL && - _last_compile_type != no_compile) { - if (_last_compile_type == osr_compile) { - tty->print_cr("Last parse: [osr]%d+++(%d) %s", - _osr_compilation_id, _last_compile_level, _last_method_compiled); - } else { - tty->print_cr("Last parse: %d+++(%d) %s", - _compilation_id, _last_compile_level, _last_method_compiled); - } - } -} - // Print general/accumulated JIT information. void CompileBroker::print_info(outputStream *out) { if (out == NULL) out = tty;
--- a/src/hotspot/share/compiler/compileBroker.hpp Tue Apr 09 16:32:22 2019 -0700 +++ b/src/hotspot/share/compiler/compileBroker.hpp Tue Apr 09 19:34:05 2019 -0700 @@ -173,10 +173,6 @@ static volatile jint _compilation_id; static volatile jint _osr_compilation_id; - static int _last_compile_type; - static int _last_compile_level; - static char _last_method_compiled[name_buffer_length]; - static CompileQueue* _c2_compile_queue; static CompileQueue* _c1_compile_queue; @@ -254,7 +250,8 @@ static void invoke_compiler_on_method(CompileTask* task); static void post_compile(CompilerThread* thread, CompileTask* task, bool success, ciEnv* ci_env, int compilable, const char* failure_reason); - static void set_last_compile(CompilerThread *thread, const methodHandle& method, bool is_osr, int comp_level); + static void update_compile_perf_data(CompilerThread *thread, const methodHandle& method, bool is_osr); + static void push_jni_handle_block(); static void pop_jni_handle_block(); static void collect_statistics(CompilerThread* thread, elapsedTimer time, CompileTask* task); @@ -382,9 +379,6 @@ // Print a detailed accounting of compilation time static void print_times(bool per_compiler = true, bool aggregate = true); - // Debugging output for failure - static void print_last_compile(); - // compiler name for debugging static const char* compiler_name(int comp_level);