RFR: 8367475: Incorrect lock usage in LambdaFormInvokers::regenerate_holder_classes
Ioi Lam
iklam at openjdk.org
Thu Sep 11 22:41:08 UTC 2025
The assert happens because we attempt to allocate Java objects while holding a mutex:
MutexLocker ml(Thread::current(), LambdaFormInvokers_lock);
list_lines = oopFactory::new_objArray_handle(vmClasses::String_klass(), len, CHECK);
for (int i = 0; i < len; i++) {
Handle h_line = java_lang_String::create_from_str(_lambdaform_lines->at(i), CHECK);
It's possible for the allocations to trigger a call to Java when JVMTI is enabled.
The fix is to do the allocation outside of the mutex. However, we still use the mutex to make sure we have a consistent view of `_lambdaform_lines`, which may be modified by concurrent Java threads.
-------------
Commit messages:
- @liach comment -- assert only dumper thread can call LambdaFormInvokers::regenerate_holder_classes()
- 8360269: Incorrect lock usage in LambdaFormInvokers::regenerate_holder_classes
Changes: https://git.openjdk.org/jdk/pull/27231/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27231&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8367475
Stats: 40 lines in 3 files changed: 24 ins; 8 del; 8 mod
Patch: https://git.openjdk.org/jdk/pull/27231.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/27231/head:pull/27231
PR: https://git.openjdk.org/jdk/pull/27231
More information about the hotspot-runtime-dev
mailing list