Skip to content

Commit

Permalink
Merge pull request #20231 from jdmpapin/invokehandle-symref-sharing-race
Browse files Browse the repository at this point in the history
Set dummy resolved method flag in findOrCreateHandleMethodSymbol()
  • Loading branch information
0xdaryl authored Sep 26, 2024
2 parents 898d0e6 + 7dd2021 commit ec19a27
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 2 additions & 0 deletions runtime/compiler/compile/J9SymbolReferenceTable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,8 @@ J9::SymbolReferenceTable::findOrCreateHandleMethodSymbol(TR::ResolvedMethodSymbo
#if defined(J9VM_OPT_OPENJDK_METHODHANDLE)
TR_ResolvedMethod * method = owningMethodSymbol->getResolvedMethod()->getResolvedHandleMethod(comp(), cpIndex, unresolvedInCP, isInvokeCacheAppendixNull);
TR::SymbolReference * symRef = findOrCreateMethodSymbol(owningMethodSymbol->getResolvedMethodIndex(), cpIndex, method, TR::MethodSymbol::Static);
if (*unresolvedInCP)
symRef->getSymbol()->setDummyResolvedMethod(); // linkToStatic is a dummy TR_ResolvedMethod
#else
TR_ResolvedMethod * method = owningMethodSymbol->getResolvedMethod()->getResolvedHandleMethod(comp(), cpIndex, unresolvedInCP);
TR::SymbolReference * symRef = findOrCreateMethodSymbol(owningMethodSymbol->getResolvedMethodIndex(), cpIndex, method, TR::MethodSymbol::ComputedVirtual);
Expand Down
2 changes: 0 additions & 2 deletions runtime/compiler/ilgen/Walker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3340,8 +3340,6 @@ TR_J9ByteCodeIlGenerator::genInvokeHandle(int32_t cpIndex)
bool isUnresolved = false;
bool isInvokeCacheAppendixNull = false;
TR::SymbolReference * targetMethodSymRef = symRefTab()->findOrCreateHandleMethodSymbol(_methodSymbol, cpIndex, &isUnresolved, &isInvokeCacheAppendixNull);
if (isUnresolved)
targetMethodSymRef->getSymbol()->setDummyResolvedMethod(); // linkToStatic is a dummy TR_ResolvedMethod
TR::SymbolReference *methodTypeTableEntrySymRef = symRefTab()->findOrCreateMethodTypeTableEntrySymbol(_methodSymbol, cpIndex);
TR_ResolvedJ9Method* owningMethod = static_cast<TR_ResolvedJ9Method *>(_methodSymbol->getResolvedMethod());
uintptr_t * invokeCacheArray = (uintptr_t *) owningMethod->methodTypeTableEntryAddress(cpIndex);
Expand Down

0 comments on commit ec19a27

Please sign in to comment.