Skip to content

Commit 5e122eb

Browse files
committed
Revert "ensure a unique fallback method is created for a given method"
This reverts commit ad19703.
1 parent ad42202 commit 5e122eb

File tree

1 file changed

+3
-48
lines changed
  • substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/meta

1 file changed

+3
-48
lines changed

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/meta/AnalysisType.java

Lines changed: 3 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ public abstract class AnalysisType extends AnalysisElement implements WrappedJav
161161
* implement a method.
162162
*/
163163
private static final Object NULL_METHOD = new Object();
164-
private static final Object COMPUTING_FALLBACK_RESOLUTION = new Object();
165164

166165
private final AnalysisType componentType;
167166
private final AnalysisType elementalType;
@@ -1118,7 +1117,6 @@ public AnalysisMethod resolveConcreteMethod(ResolvedJavaMethod method, ResolvedJ
11181117
if (resolvedMethod == null) {
11191118
ResolvedJavaMethod originalMethod = OriginalMethodProvider.getOriginalMethod(method);
11201119
Object newResolvedMethod = null;
1121-
boolean computingFallback = false;
11221120
if (originalMethod != null) {
11231121
/*
11241122
* We do not want any access checks to be performed, so we use the method's
@@ -1130,27 +1128,7 @@ public AnalysisMethod resolveConcreteMethod(ResolvedJavaMethod method, ResolvedJ
11301128
var concreteMethod = originalMethod instanceof BaseLayerMethod ? originalMethod : wrapped.resolveConcreteMethod(originalMethod, originalCallerType);
11311129
newResolvedMethod = universe.lookup(concreteMethod);
11321130
if (newResolvedMethod == null) {
1133-
/*
1134-
* Note we cannot directly use computeIfAbsent; calling
1135-
* fallbackResolveConcreteMethod will potentially cause other entries to be
1136-
* added to resolvedMethods, resulting in illegal recursive updates.
1137-
*/
1138-
Object oldResolvedMethod = resolvedMethods.putIfAbsent(method, COMPUTING_FALLBACK_RESOLUTION);
1139-
if (oldResolvedMethod == null) {
1140-
computingFallback = true;
1141-
try {
1142-
newResolvedMethod = getUniverse().getBigbang().fallbackResolveConcreteMethod(this, (AnalysisMethod) method);
1143-
} catch (Throwable t) {
1144-
/* Finalize result if an error occurs. */
1145-
resolvedMethods.compute(method, (k, v) -> {
1146-
assert v == COMPUTING_FALLBACK_RESOLUTION : v;
1147-
return NULL_METHOD;
1148-
});
1149-
computingFallback = false;
1150-
1151-
throw t;
1152-
}
1153-
}
1131+
newResolvedMethod = getUniverse().getBigbang().fallbackResolveConcreteMethod(this, (AnalysisMethod) method);
11541132
}
11551133

11561134
} catch (UnsupportedFeatureException e) {
@@ -1162,32 +1140,9 @@ public AnalysisMethod resolveConcreteMethod(ResolvedJavaMethod method, ResolvedJ
11621140
if (newResolvedMethod == null) {
11631141
newResolvedMethod = NULL_METHOD;
11641142
}
1165-
1166-
if (computingFallback) {
1167-
/*
1168-
* If computingFallback is set, it is this thread's responsibility to install the
1169-
* result and override the placeholder put in the map.
1170-
*/
1171-
var finalResolvedMethod = newResolvedMethod;
1172-
resolvedMethods.compute(method, (k, v) -> {
1173-
assert v == COMPUTING_FALLBACK_RESOLUTION : v;
1174-
return finalResolvedMethod;
1175-
});
1176-
resolvedMethod = newResolvedMethod;
1177-
} else {
1178-
Object oldResolvedMethod = resolvedMethods.putIfAbsent(method, newResolvedMethod);
1179-
resolvedMethod = oldResolvedMethod != null ? oldResolvedMethod : newResolvedMethod;
1180-
}
1181-
}
1182-
1183-
/*
1184-
* Wait for fallback resolution computation to complete on another thread (if needed).
1185-
*/
1186-
while (resolvedMethod == COMPUTING_FALLBACK_RESOLUTION) {
1187-
Thread.onSpinWait();
1188-
resolvedMethod = resolvedMethods.get(method);
1143+
Object oldResolvedMethod = resolvedMethods.putIfAbsent(method, newResolvedMethod);
1144+
resolvedMethod = oldResolvedMethod != null ? oldResolvedMethod : newResolvedMethod;
11891145
}
1190-
assert resolvedMethod != null;
11911146
return resolvedMethod == NULL_METHOD ? null : (AnalysisMethod) resolvedMethod;
11921147
}
11931148

0 commit comments

Comments
 (0)