hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
changeset 13295 34d3b7128667
parent 13195 be27e1b6a4b9
parent 13293 c2b4f191c489
child 13296 4e00da2c0596
equal deleted inserted replaced
13281:8e8efda5270c 13295:34d3b7128667
   543   if (!uninitialized_static) {
   543   if (!uninitialized_static) {
   544     get_code = ((is_static) ? Bytecodes::_getstatic : Bytecodes::_getfield);
   544     get_code = ((is_static) ? Bytecodes::_getstatic : Bytecodes::_getfield);
   545     if (is_put || !info.access_flags().is_final()) {
   545     if (is_put || !info.access_flags().is_final()) {
   546       put_code = ((is_static) ? Bytecodes::_putstatic : Bytecodes::_putfield);
   546       put_code = ((is_static) ? Bytecodes::_putstatic : Bytecodes::_putfield);
   547     }
   547     }
   548   }
       
   549 
       
   550   if (is_put && !is_static && klass->is_subclass_of(SystemDictionary::CallSite_klass()) && (info.name() == vmSymbols::target_name())) {
       
   551     const jint direction = frame::interpreter_frame_expression_stack_direction();
       
   552     Handle call_site    (THREAD, *((oop*) thread->last_frame().interpreter_frame_tos_at(-1 * direction)));
       
   553     Handle method_handle(THREAD, *((oop*) thread->last_frame().interpreter_frame_tos_at( 0 * direction)));
       
   554     assert(call_site    ->is_a(SystemDictionary::CallSite_klass()),     "must be");
       
   555     assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "must be");
       
   556 
       
   557     {
       
   558       // Walk all nmethods depending on this call site.
       
   559       MutexLocker mu(Compile_lock, thread);
       
   560       Universe::flush_dependents_on(call_site, method_handle);
       
   561     }
       
   562 
       
   563     // Don't allow fast path for setting CallSite.target and sub-classes.
       
   564     put_code = (Bytecodes::Code) 0;
       
   565   }
   548   }
   566 
   549 
   567   cache_entry(thread)->set_field(
   550   cache_entry(thread)->set_field(
   568     get_code,
   551     get_code,
   569     put_code,
   552     put_code,