diff -r 3533814ab107 -r 4a5fc611c9a7 hotspot/src/share/vm/ci/ciEnv.cpp --- a/hotspot/src/share/vm/ci/ciEnv.cpp Mon Nov 18 12:26:51 2013 -0800 +++ b/hotspot/src/share/vm/ci/ciEnv.cpp Thu Nov 14 19:27:07 2013 +0100 @@ -1003,21 +1003,15 @@ // Free codeBlobs code_buffer->free_blob(); - if (nm == NULL) { - // The CodeCache is full. Print out warning and disable compilation. - record_failure("code cache is full"); - { - MutexUnlocker ml(Compile_lock); - MutexUnlocker locker(MethodCompileQueue_lock); - CompileBroker::handle_full_code_cache(); - } - } else { + if (nm != NULL) { nm->set_has_unsafe_access(has_unsafe_access); nm->set_has_wide_vectors(has_wide_vectors); // Record successful registration. // (Put nm into the task handle *before* publishing to the Java heap.) - if (task() != NULL) task()->set_code(nm); + if (task() != NULL) { + task()->set_code(nm); + } if (entry_bci == InvocationEntryBci) { if (TieredCompilation) { @@ -1055,12 +1049,16 @@ method->method_holder()->add_osr_nmethod(nm); } } - } - // JVMTI -- compiled method notification (must be done outside lock) + } // safepoints are allowed again + if (nm != NULL) { + // JVMTI -- compiled method notification (must be done outside lock) nm->post_compiled_method_load_event(); + } else { + // The CodeCache is full. Print out warning and disable compilation. + record_failure("code cache is full"); + CompileBroker::handle_full_code_cache(); } - }