Mercurial > hg > graal-compiler
changeset 12865:5cc2d82aa82a
8024943: ciReplay: fails to dump replay data during safepointing
Reviewed-by: kvn, twisti
author | vlivanov |
---|---|
date | Mon, 07 Oct 2013 14:11:49 +0400 |
parents | bf8a21c3ab3b |
children | f478c98e8114 |
files | src/share/vm/ci/ciEnv.cpp src/share/vm/ci/ciEnv.hpp src/share/vm/ci/ciInstanceKlass.cpp src/share/vm/ci/ciMethod.cpp src/share/vm/ci/ciMethodData.cpp src/share/vm/utilities/vmError.cpp |
diffstat | 6 files changed, 15 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/ci/ciEnv.cpp Mon Oct 07 14:10:29 2013 +0400 +++ b/src/share/vm/ci/ciEnv.cpp Mon Oct 07 14:11:49 2013 +0400 @@ -1154,9 +1154,12 @@ GUARDED_VM_ENTRY(return _factory->get_unloaded_object_constant();) } -void ciEnv::dump_replay_data(outputStream* out) { - VM_ENTRY_MARK; - MutexLocker ml(Compile_lock); +// ------------------------------------------------------------------ +// ciEnv::dump_replay_data* + +// Don't change thread state and acquire any locks. +// Safe to call from VM error reporter. +void ciEnv::dump_replay_data_unsafe(outputStream* out) { ResourceMark rm; #if INCLUDE_JVMTI out->print_cr("JvmtiExport can_access_local_variables %d", _jvmti_can_access_local_variables); @@ -1181,3 +1184,10 @@ entry_bci, comp_level); out->flush(); } + +void ciEnv::dump_replay_data(outputStream* out) { + GUARDED_VM_ENTRY( + MutexLocker ml(Compile_lock); + dump_replay_data_unsafe(out); + ) +}
--- a/src/share/vm/ci/ciEnv.hpp Mon Oct 07 14:10:29 2013 +0400 +++ b/src/share/vm/ci/ciEnv.hpp Mon Oct 07 14:11:49 2013 +0400 @@ -452,6 +452,7 @@ // Dump the compilation replay data for the ciEnv to the stream. void dump_replay_data(outputStream* out); + void dump_replay_data_unsafe(outputStream* out); }; #endif // SHARE_VM_CI_CIENV_HPP
--- a/src/share/vm/ci/ciInstanceKlass.cpp Mon Oct 07 14:10:29 2013 +0400 +++ b/src/share/vm/ci/ciInstanceKlass.cpp Mon Oct 07 14:11:49 2013 +0400 @@ -671,7 +671,6 @@ void ciInstanceKlass::dump_replay_data(outputStream* out) { - ASSERT_IN_VM; ResourceMark rm; InstanceKlass* ik = get_instanceKlass();
--- a/src/share/vm/ci/ciMethod.cpp Mon Oct 07 14:10:29 2013 +0400 +++ b/src/share/vm/ci/ciMethod.cpp Mon Oct 07 14:11:49 2013 +0400 @@ -1247,7 +1247,6 @@ #undef FETCH_FLAG_FROM_VM void ciMethod::dump_replay_data(outputStream* st) { - ASSERT_IN_VM; ResourceMark rm; Method* method = get_Method(); MethodCounters* mcs = method->method_counters();
--- a/src/share/vm/ci/ciMethodData.cpp Mon Oct 07 14:10:29 2013 +0400 +++ b/src/share/vm/ci/ciMethodData.cpp Mon Oct 07 14:11:49 2013 +0400 @@ -373,7 +373,6 @@ } void ciMethodData::dump_replay_data(outputStream* out) { - ASSERT_IN_VM; ResourceMark rm; MethodData* mdo = get_MethodData(); Method* method = mdo->method();
--- a/src/share/vm/utilities/vmError.cpp Mon Oct 07 14:10:29 2013 +0400 +++ b/src/share/vm/utilities/vmError.cpp Mon Oct 07 14:11:49 2013 +0400 @@ -1050,7 +1050,7 @@ FILE* replay_data_file = os::open(fd, "w"); if (replay_data_file != NULL) { fileStream replay_data_stream(replay_data_file, /*need_close=*/true); - env->dump_replay_data(&replay_data_stream); + env->dump_replay_data_unsafe(&replay_data_stream); out.print_raw("#\n# Compiler replay data is saved as:\n# "); out.print_raw_cr(buffer); } else {