Skip to content

Commit 946f941

Browse files
authored
Merge pull request #22723 from lzhou2025/hang
RAM Class Persistence: Fix Open liberty server hangs
2 parents 78ceb9a + 2d34e9b commit 946f941

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

runtime/vm/KeyHashTable.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,12 @@ hashClassTableAt(J9ClassLoader *classLoader, U_8 *className, UDATA classNameLeng
349349
if (J9ROMCLASS_IS_HIDDEN(clazz->romClass)) {
350350
return NULL;
351351
}
352+
/* Frozen classes are not loaded, so they should not be returned with J9_FINDCLASS_FLAG_EXISTING_ONLY. */
353+
if (J9_ARE_ANY_BITS_SET(flags, J9_FINDCLASS_FLAG_EXISTING_ONLY)
354+
&& J9_ARE_ANY_BITS_SET(clazz->classFlags, J9ClassIsFrozen)
355+
) {
356+
return NULL;
357+
}
352358
if (J9_ARE_NO_BITS_SET(flags, J9_FINDCLASS_FLAG_DONT_SKIP_FROZEN_JCL_DEFINE_CLASS)
353359
&& J9_ARE_ALL_BITS_SET(clazz->classFlags, J9ClassIsJCLDefineClass | J9ClassIsFrozen)
354360
) {
@@ -753,6 +759,12 @@ hashClassTableAtString(J9ClassLoader *classLoader, j9object_t stringObject, UDAT
753759
if (J9ROMCLASS_IS_HIDDEN(clazz->romClass)) {
754760
return NULL;
755761
}
762+
/* Frozen classes are not loaded, so they should not be returned with J9_FINDCLASS_FLAG_EXISTING_ONLY. */
763+
if (J9_ARE_ANY_BITS_SET(flags, J9_FINDCLASS_FLAG_EXISTING_ONLY)
764+
&& J9_ARE_ANY_BITS_SET(clazz->classFlags, J9ClassIsFrozen)
765+
) {
766+
return NULL;
767+
}
756768
if (J9_ARE_NO_BITS_SET(flags, J9_FINDCLASS_FLAG_DONT_SKIP_FROZEN_JCL_DEFINE_CLASS)
757769
&& J9_ARE_ALL_BITS_SET(clazz->classFlags, J9ClassIsJCLDefineClass | J9ClassIsFrozen)
758770
) {

runtime/vm/classsupport.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ internalFindClassString(J9VMThread* currentThread, j9object_t moduleName, j9obje
324324
if (!fastMode) {
325325
omrthread_monitor_enter(vm->classTableMutex);
326326
}
327-
result = hashClassTableAtString(classLoader, (j9object_t) className, 0);
327+
result = hashClassTableAtString(classLoader, (j9object_t) className, options);
328328
#if defined(J9VM_OPT_SNAPSHOTS)
329329
if ((NULL != result) && IS_RESTORE_RUN(vm)) {
330330
if (!loadWarmClassFromSnapshot(currentThread, classLoader, result)) {
@@ -1183,7 +1183,7 @@ loadNonArrayClass(J9VMThread* vmThread, J9Module *j9module, U_8* className, UDAT
11831183
omrthread_monitor_enter(vm->classTableMutex);
11841184
}
11851185

1186-
foundClass = hashClassTableAt(classLoader, className, classNameLength, 0);
1186+
foundClass = hashClassTableAt(classLoader, className, classNameLength, options);
11871187
if (NULL != foundClass) {
11881188
#if defined(J9VM_OPT_SNAPSHOTS)
11891189
if (IS_RESTORE_RUN(vm)) {
@@ -1214,7 +1214,7 @@ loadNonArrayClass(J9VMThread* vmThread, J9Module *j9module, U_8* className, UDAT
12141214
omrthread_monitor_enter(vm->classTableMutex);
12151215

12161216
/* check again if somebody else already loaded the class */
1217-
foundClass = hashClassTableAt(classLoader, className, classNameLength, 0);
1217+
foundClass = hashClassTableAt(classLoader, className, classNameLength, options);
12181218
if (NULL != foundClass) {
12191219
#if defined(J9VM_OPT_SNAPSHOTS)
12201220
if (IS_RESTORE_RUN(vm)

0 commit comments

Comments
 (0)