hotspot/src/share/vm/code/compiledIC.cpp
changeset 32466 915d0c3d25aa
parent 32401 cc58aeaec340
child 33160 c59f1676d27e
equal deleted inserted replaced
32465:d38126f16dbe 32466:915d0c3d25aa
   285   CodeBlob* caller = CodeCache::find_blob_unsafe(instruction_address());
   285   CodeBlob* caller = CodeCache::find_blob_unsafe(instruction_address());
   286   bool is_c1_method = caller->is_compiled_by_c1();
   286   bool is_c1_method = caller->is_compiled_by_c1();
   287   assert( is_c1_method ||
   287   assert( is_c1_method ||
   288          !is_monomorphic ||
   288          !is_monomorphic ||
   289          is_optimized() ||
   289          is_optimized() ||
       
   290          !caller->is_alive() ||
   290          (cached_metadata() != NULL && cached_metadata()->is_klass()), "sanity check");
   291          (cached_metadata() != NULL && cached_metadata()->is_klass()), "sanity check");
   291 #endif // ASSERT
   292 #endif // ASSERT
   292   return is_monomorphic;
   293   return is_monomorphic;
   293 }
   294 }
   294 
   295 
   319   }
   320   }
   320   return is_call_to_interpreted;
   321   return is_call_to_interpreted;
   321 }
   322 }
   322 
   323 
   323 
   324 
   324 void CompiledIC::set_to_clean() {
   325 void CompiledIC::set_to_clean(bool in_use) {
   325   assert(SafepointSynchronize::is_at_safepoint() || CompiledIC_lock->is_locked() , "MT-unsafe call");
   326   assert(SafepointSynchronize::is_at_safepoint() || CompiledIC_lock->is_locked() , "MT-unsafe call");
   326   if (TraceInlineCacheClearing || TraceICs) {
   327   if (TraceInlineCacheClearing || TraceICs) {
   327     tty->print_cr("IC@" INTPTR_FORMAT ": set to clean", p2i(instruction_address()));
   328     tty->print_cr("IC@" INTPTR_FORMAT ": set to clean", p2i(instruction_address()));
   328     print();
   329     print();
   329   }
   330   }
   335     entry = SharedRuntime::get_resolve_virtual_call_stub();
   336     entry = SharedRuntime::get_resolve_virtual_call_stub();
   336   }
   337   }
   337 
   338 
   338   // A zombie transition will always be safe, since the metadata has already been set to NULL, so
   339   // A zombie transition will always be safe, since the metadata has already been set to NULL, so
   339   // we only need to patch the destination
   340   // we only need to patch the destination
   340   bool safe_transition = is_optimized() || SafepointSynchronize::is_at_safepoint();
   341   bool safe_transition = !in_use || is_optimized() || SafepointSynchronize::is_at_safepoint();
   341 
   342 
   342   if (safe_transition) {
   343   if (safe_transition) {
   343     // Kill any leftover stub we might have too
   344     // Kill any leftover stub we might have too
   344     clear_ic_stub();
   345     clear_ic_stub();
   345     if (is_optimized()) {
   346     if (is_optimized()) {