< prev index next >

src/hotspot/share/interpreter/linkResolver.cpp

Print this page
*** 1793,24 ***
      return false;
    }
  }
  
  void LinkResolver::resolve_invokehandle(CallInfo& result, const constantPoolHandle& pool, int index, TRAPS) {
- 
    PerfTraceTimedEvent timer(ClassLoader::perf_resolve_invokehandle_time(),
!                             ClassLoader::perf_resolve_invokehandle_count());
  
    LinkInfo link_info(pool, index, Bytecodes::_invokehandle, CHECK);
    if (log_is_enabled(Info, methodhandles)) {
      ResourceMark rm(THREAD);
      log_info(methodhandles)("resolve_invokehandle %s %s", link_info.name()->as_C_string(),
                              link_info.signature()->as_C_string());
    }
-   { // Check if the call site has been bound already, and short circuit:
-     bool is_done = resolve_previously_linked_invokehandle(result, link_info, pool, index, CHECK);
-     if (is_done) return;
-   }
    resolve_handle_call(result, link_info, CHECK);
  }
  
  void LinkResolver::resolve_handle_call(CallInfo& result,
                                         const LinkInfo& link_info,
--- 1793,24 ---
      return false;
    }
  }
  
  void LinkResolver::resolve_invokehandle(CallInfo& result, const constantPoolHandle& pool, int index, TRAPS) {
    PerfTraceTimedEvent timer(ClassLoader::perf_resolve_invokehandle_time(),
!                             ClassLoader::perf_resolve_invokehandle_count(),
+                             THREAD->class_being_initialized() == nullptr);
  
    LinkInfo link_info(pool, index, Bytecodes::_invokehandle, CHECK);
+   { // Check if the call site has been bound already, and short circuit:
+     bool is_done = resolve_previously_linked_invokehandle(result, link_info, pool, index, CHECK);
+     if (is_done) return;
+   }
    if (log_is_enabled(Info, methodhandles)) {
      ResourceMark rm(THREAD);
      log_info(methodhandles)("resolve_invokehandle %s %s", link_info.name()->as_C_string(),
                              link_info.signature()->as_C_string());
    }
    resolve_handle_call(result, link_info, CHECK);
  }
  
  void LinkResolver::resolve_handle_call(CallInfo& result,
                                         const LinkInfo& link_info,

*** 1849,12 ***
    JFR_ONLY(Jfr::on_resolution(result, CHECK);)
  }
  
  void LinkResolver::resolve_invokedynamic(CallInfo& result, const constantPoolHandle& pool, int indy_index, TRAPS) {
    PerfTraceTimedEvent timer(ClassLoader::perf_resolve_invokedynamic_time(),
!                             ClassLoader::perf_resolve_invokedynamic_count());
! 
    int pool_index = pool->resolved_indy_entry_at(indy_index)->constant_pool_index();
  
    // Resolve the bootstrap specifier (BSM + optional arguments).
    BootstrapInfo bootstrap_specifier(pool, pool_index, indy_index);
  
--- 1849,12 ---
    JFR_ONLY(Jfr::on_resolution(result, CHECK);)
  }
  
  void LinkResolver::resolve_invokedynamic(CallInfo& result, const constantPoolHandle& pool, int indy_index, TRAPS) {
    PerfTraceTimedEvent timer(ClassLoader::perf_resolve_invokedynamic_time(),
!                             ClassLoader::perf_resolve_invokedynamic_count(),
!                             THREAD->class_being_initialized() == nullptr);
    int pool_index = pool->resolved_indy_entry_at(indy_index)->constant_pool_index();
  
    // Resolve the bootstrap specifier (BSM + optional arguments).
    BootstrapInfo bootstrap_specifier(pool, pool_index, indy_index);
  
< prev index next >