`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)
```
```
// 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)
```
- clones
-
JDK-8305252 make_method_handle_intrinsic may call java code under a lock
-
- Closed
-