Skip to content

Commit 229d077

Browse files
committed
Synchronize the access to LRUCache
- a wizard that is creating multiple cdt projects encounters ConcurrentModificationException
1 parent 139907d commit 229d077

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.net.URISyntaxException;
2020
import java.util.ArrayList;
2121
import java.util.Arrays;
22+
import java.util.Collections;
2223
import java.util.HashMap;
2324
import java.util.HashSet;
2425
import java.util.LinkedHashSet;
@@ -94,11 +95,11 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
9495

9596
private static final int FIND_RESOURCES_CACHE_SIZE = 100;
9697

97-
private LRUCache<URI, IResource[]> workspaceRootFindContainersForLocationURICache = new LRUCache<>(
98-
FIND_RESOURCES_CACHE_SIZE);
99-
private LRUCache<URI, IResource[]> workspaceRootFindFilesForLocationURICache = new LRUCache<>(
100-
FIND_RESOURCES_CACHE_SIZE);
101-
private HashMap<IProject, LRUCache<IPath, List<IResource>>> findPathInProjectCache = new HashMap<>();
98+
private Map<URI, IResource[]> workspaceRootFindContainersForLocationURICache = Collections.synchronizedMap(new LRUCache<>(
99+
FIND_RESOURCES_CACHE_SIZE));
100+
private Map<URI, IResource[]> workspaceRootFindFilesForLocationURICache = Collections.synchronizedMap(new LRUCache<>(
101+
FIND_RESOURCES_CACHE_SIZE));
102+
private Map<IProject, LRUCache<IPath, List<IResource>>> Collections.synchronizedMap(findPathInProjectCache = new HashMap<>());
102103

103104
//String pathStr, URI baseURI -> URI
104105
private static class MappedURIKey {
@@ -144,11 +145,11 @@ public boolean equals(Object obj) {
144145
}
145146

146147
// Caches the result of determineMappedURI
147-
private LRUCache<MappedURIKey, URI> mappedURICache = new LRUCache<>(FIND_RESOURCES_CACHE_SIZE);
148+
private Map<MappedURIKey, URI> mappedURICache = Collections.synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
148149
// Caches the result of getFilesystemLocation
149-
private LRUCache<URI, IPath> fileSystemLocationCache = new LRUCache<>(FIND_RESOURCES_CACHE_SIZE);
150+
private Map<URI, IPath> fileSystemLocationCache = Collections.synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
150151
// Caches the result of new File(pathname).exists()
151-
private LRUCache<IPath, Boolean> pathExistsCache = new LRUCache<>(FIND_RESOURCES_CACHE_SIZE);
152+
private Map<IPath, Boolean> pathExistsCache = Collections.synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
152153

153154
/** @since 8.2 */
154155
protected EFSExtensionProvider efsProvider = null;

0 commit comments

Comments
 (0)