Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8306950

[REDO] JDK-8305252 make_method_handle_intrinsic may call java code under a lock

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 21
    • 21
    • hotspot
    • b21

      `SystemDictionary::find_method_handle_intrinsic` calls `Method::make_method_handle_intrinsic` under the `InvokeMethodTable_lock` lock. The correctness is motivated with a comment:
      ```
          // This function could get an OOM but it is safe to call inside of a lock because
          // throwing OutOfMemoryError doesn't call Java code.
      ```

      However `Method::make_adapters` will throw a `VirtualMachineError` via
      `THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), "Out of space in CodeCache for adapters");` which will call java code.

      Fastdebug linux x86_64 stack trace:
      ```
      V [libjvm.so+0x10a4ab0] JavaCallWrapper::JavaCallWrapper(methodHandle const&, Handle, JavaValue*, JavaThread*)+0xa0 (javaCalls.cpp:60)
      V [libjvm.so+0x10a6764] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x1a4 (javaCalls.cpp:394)
      V [libjvm.so+0x10a8a07] JavaCalls::call_special(JavaValue*, Klass*, Symbol*, Symbol*, JavaCallArguments*, JavaThread*)+0x317 (javaCalls.cpp:329)
      V [libjvm.so+0x10a92f9] JavaCalls::construct_new_instance(InstanceKlass*, Symbol*, JavaCallArguments*, JavaThread*)+0xf9 (javaCalls.cpp:295)
      V [libjvm.so+0xd71dca] Exceptions::new_exception(JavaThread*, Symbol*, Symbol*, JavaCallArguments*, Handle, Handle)+0x22a (exceptions.cpp:285)
      V [libjvm.so+0xd72022] Exceptions::new_exception(JavaThread*, Symbol*, Symbol*, JavaCallArguments*, Handle, Handle, Handle)+0x62 (exceptions.cpp:306)
      V [libjvm.so+0xd72df4] Exceptions::new_exception(JavaThread*, Symbol*, char const*, Handle, Handle, Handle, Exceptions::ExceptionMsgToUtf8Mode)+0x604 (exceptions.cpp:389)
      V [libjvm.so+0xd76e68] Exceptions::_throw_msg(JavaThread*, char const*, int, Symbol*, char const*, Handle, Handle)+0x198 (exceptions.cpp:193)
      V [libjvm.so+0xd7718e] Exceptions::_throw_msg(JavaThread*, char const*, int, Symbol*, char const*)+0x1ee (exceptions.cpp:232)
      V [libjvm.so+0x167cb19] Method::make_adapters(methodHandle const&, JavaThread*)+0x129 (method.cpp:1258)
      V [libjvm.so+0x167cc3b] Method::link_method(methodHandle const&, JavaThread*)+0x11b (method.cpp:1234)
      V [libjvm.so+0x16839fd] Method::make_method_handle_intrinsic(vmIntrinsicID, Symbol*, JavaThread*)+0x73d (method.cpp:1484)
      V [libjvm.so+0x1a983ed] SystemDictionary::find_method_handle_intrinsic(vmIntrinsicID, Symbol*, JavaThread*)+0x19d (systemDictionary.cpp:1963)
      ```

            coleenp Coleen Phillimore
            coleenp Coleen Phillimore
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: