933 // To prevent compile queue updates. |
933 // To prevent compile queue updates. |
934 MutexLocker locker(MethodCompileQueue_lock, THREAD); |
934 MutexLocker locker(MethodCompileQueue_lock, THREAD); |
935 |
935 |
936 // Prevent SystemDictionary::add_to_hierarchy from running |
936 // Prevent SystemDictionary::add_to_hierarchy from running |
937 // and invalidating our dependencies until we install this method. |
937 // and invalidating our dependencies until we install this method. |
|
938 // No safepoints are allowed. Otherwise, class redefinition can occur in between. |
938 MutexLocker ml(Compile_lock); |
939 MutexLocker ml(Compile_lock); |
|
940 No_Safepoint_Verifier nsv; |
939 |
941 |
940 // Change in Jvmti state may invalidate compilation. |
942 // Change in Jvmti state may invalidate compilation. |
941 if (!failing() && |
943 if (!failing() && |
942 ( (!jvmti_can_hotswap_or_post_breakpoint() && |
944 ( (!jvmti_can_hotswap_or_post_breakpoint() && |
943 JvmtiExport::can_hotswap_or_post_breakpoint()) || |
945 JvmtiExport::can_hotswap_or_post_breakpoint()) || |
999 compiler, comp_level); |
1001 compiler, comp_level); |
1000 |
1002 |
1001 // Free codeBlobs |
1003 // Free codeBlobs |
1002 code_buffer->free_blob(); |
1004 code_buffer->free_blob(); |
1003 |
1005 |
1004 // stress test 6243940 by immediately making the method |
|
1005 // non-entrant behind the system's back. This has serious |
|
1006 // side effects on the code cache and is not meant for |
|
1007 // general stress testing |
|
1008 if (nm != NULL && StressNonEntrant) { |
|
1009 MutexLockerEx pl(Patching_lock, Mutex::_no_safepoint_check_flag); |
|
1010 NativeJump::patch_verified_entry(nm->entry_point(), nm->verified_entry_point(), |
|
1011 SharedRuntime::get_handle_wrong_method_stub()); |
|
1012 } |
|
1013 |
|
1014 if (nm == NULL) { |
1006 if (nm == NULL) { |
1015 // The CodeCache is full. Print out warning and disable compilation. |
1007 // The CodeCache is full. Print out warning and disable compilation. |
1016 record_failure("code cache is full"); |
1008 record_failure("code cache is full"); |
1017 { |
1009 { |
1018 MutexUnlocker ml(Compile_lock); |
1010 MutexUnlocker ml(Compile_lock); |
1034 if (TraceMethodReplacement && old != NULL) { |
1026 if (TraceMethodReplacement && old != NULL) { |
1035 ResourceMark rm; |
1027 ResourceMark rm; |
1036 char *method_name = method->name_and_sig_as_C_string(); |
1028 char *method_name = method->name_and_sig_as_C_string(); |
1037 tty->print_cr("Replacing method %s", method_name); |
1029 tty->print_cr("Replacing method %s", method_name); |
1038 } |
1030 } |
1039 if (old != NULL ) { |
1031 if (old != NULL) { |
1040 old->make_not_entrant(); |
1032 old->make_not_entrant(); |
1041 } |
1033 } |
1042 } |
1034 } |
1043 if (TraceNMethodInstalls ) { |
1035 if (TraceNMethodInstalls) { |
1044 ResourceMark rm; |
1036 ResourceMark rm; |
1045 char *method_name = method->name_and_sig_as_C_string(); |
1037 char *method_name = method->name_and_sig_as_C_string(); |
1046 ttyLocker ttyl; |
1038 ttyLocker ttyl; |
1047 tty->print_cr("Installing method (%d) %s ", |
1039 tty->print_cr("Installing method (%d) %s ", |
1048 comp_level, |
1040 comp_level, |
1049 method_name); |
1041 method_name); |
1050 } |
1042 } |
1051 // Allow the code to be executed |
1043 // Allow the code to be executed |
1052 method->set_code(method, nm); |
1044 method->set_code(method, nm); |
1053 } else { |
1045 } else { |
1054 if (TraceNMethodInstalls ) { |
1046 if (TraceNMethodInstalls) { |
1055 ResourceMark rm; |
1047 ResourceMark rm; |
1056 char *method_name = method->name_and_sig_as_C_string(); |
1048 char *method_name = method->name_and_sig_as_C_string(); |
1057 ttyLocker ttyl; |
1049 ttyLocker ttyl; |
1058 tty->print_cr("Installing osr method (%d) %s @ %d", |
1050 tty->print_cr("Installing osr method (%d) %s @ %d", |
1059 comp_level, |
1051 comp_level, |
1060 method_name, |
1052 method_name, |
1061 entry_bci); |
1053 entry_bci); |
1062 } |
1054 } |
1063 method->method_holder()->add_osr_nmethod(nm); |
1055 method->method_holder()->add_osr_nmethod(nm); |
1064 |
|
1065 } |
1056 } |
1066 } |
1057 } |
1067 } |
1058 } |
1068 // JVMTI -- compiled method notification (must be done outside lock) |
1059 // JVMTI -- compiled method notification (must be done outside lock) |
1069 if (nm != NULL) { |
1060 if (nm != NULL) { |