Skip to content

Commit 58dd90b

Browse files
committed
Make non-concurrent, error causing data structures concurrent
1 parent f5e16b2 commit 58dd90b

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/DynamicAccessDetectionFeature.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,12 @@
5050
import java.nio.file.Files;
5151
import java.nio.file.NoSuchFileException;
5252
import java.nio.file.Path;
53-
import java.util.ArrayList;
5453
import java.util.Arrays;
5554
import java.util.Objects;
5655
import java.util.Set;
57-
import java.util.TreeMap;
58-
import java.util.List;
5956
import java.util.Map;
6057
import java.util.concurrent.ConcurrentHashMap;
58+
import java.util.concurrent.ConcurrentLinkedQueue;
6159
import java.util.concurrent.ConcurrentSkipListMap;
6260
import java.util.stream.Collectors;
6361
import java.util.stream.Stream;
@@ -75,7 +73,7 @@ public final class DynamicAccessDetectionFeature implements InternalFeature {
7573

7674
private record MethodsByAccessKind(Map<DynamicAccessDetectionPhase.DynamicAccessKind, CallLocationsByMethod> methodsByAccessKind) {
7775
MethodsByAccessKind() {
78-
this(new TreeMap<>());
76+
this(new ConcurrentSkipListMap<>());
7977
}
8078

8179
public Set<DynamicAccessDetectionPhase.DynamicAccessKind> getAccessKinds() {
@@ -87,17 +85,17 @@ public CallLocationsByMethod getCallLocationsByMethod(DynamicAccessDetectionPhas
8785
}
8886
}
8987

90-
private record CallLocationsByMethod(Map<String, List<String>> callLocationsByMethod) {
88+
private record CallLocationsByMethod(Map<String, ConcurrentLinkedQueue<String>> callLocationsByMethod) {
9189
CallLocationsByMethod() {
92-
this(new TreeMap<>());
90+
this(new ConcurrentSkipListMap<>());
9391
}
9492

9593
public Set<String> getMethods() {
9694
return callLocationsByMethod.keySet();
9795
}
9896

99-
public List<String> getMethodCallLocations(String methodName) {
100-
return callLocationsByMethod.getOrDefault(methodName, new ArrayList<>());
97+
public ConcurrentLinkedQueue<String> getMethodCallLocations(String methodName) {
98+
return callLocationsByMethod.getOrDefault(methodName, new ConcurrentLinkedQueue<>());
10199
}
102100
}
103101

@@ -136,12 +134,12 @@ public static DynamicAccessDetectionFeature instance() {
136134
public void addCall(String entry, DynamicAccessDetectionPhase.DynamicAccessKind accessKind, String call, String callLocation) {
137135
MethodsByAccessKind entryContent = callsBySourceEntry.computeIfAbsent(entry, k -> new MethodsByAccessKind());
138136
CallLocationsByMethod methodCallLocations = entryContent.methodsByAccessKind().computeIfAbsent(accessKind, k -> new CallLocationsByMethod());
139-
List<String> callLocations = methodCallLocations.callLocationsByMethod().computeIfAbsent(call, k -> new ArrayList<>());
137+
ConcurrentLinkedQueue<String> callLocations = methodCallLocations.callLocationsByMethod().computeIfAbsent(call, k -> new ConcurrentLinkedQueue<>());
140138
callLocations.add(callLocation);
141139
}
142140

143141
public MethodsByAccessKind getMethodsByAccessKind(String entry) {
144-
return callsBySourceEntry.getOrDefault(entry, new MethodsByAccessKind());
142+
return callsBySourceEntry.computeIfAbsent(entry, k -> new MethodsByAccessKind());
145143
}
146144

147145
public UnmodifiableEconomicSet<String> getSourceEntries() {

0 commit comments

Comments
 (0)