1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Synchronize the access to LRUCache

- a wizard that is creating multiple cdt projects encounters
ConcurrentModificationException
This commit is contained in:
Ionut Matei 2024-12-18 10:00:34 +02:00 committed by Jonah Graham
parent f0c74ed38d
commit 971204426e

View file

@ -19,6 +19,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
@ -94,11 +95,12 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
private static final int FIND_RESOURCES_CACHE_SIZE = 100;
private LRUCache<URI, IResource[]> workspaceRootFindContainersForLocationURICache = new LRUCache<>(
FIND_RESOURCES_CACHE_SIZE);
private LRUCache<URI, IResource[]> workspaceRootFindFilesForLocationURICache = new LRUCache<>(
FIND_RESOURCES_CACHE_SIZE);
private HashMap<IProject, LRUCache<IPath, List<IResource>>> findPathInProjectCache = new HashMap<>();
private Map<URI, IResource[]> workspaceRootFindContainersForLocationURICache = Collections
.synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
private Map<URI, IResource[]> workspaceRootFindFilesForLocationURICache = Collections
.synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
private Map<IProject, LRUCache<IPath, List<IResource>>> findPathInProjectCache = Collections
.synchronizedMap(new HashMap<>());
//String pathStr, URI baseURI -> URI
private static class MappedURIKey {
@ -144,11 +146,14 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
}
// Caches the result of determineMappedURI
private LRUCache<MappedURIKey, URI> mappedURICache = new LRUCache<>(FIND_RESOURCES_CACHE_SIZE);
private Map<MappedURIKey, URI> mappedURICache = Collections
.synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
// Caches the result of getFilesystemLocation
private LRUCache<URI, IPath> fileSystemLocationCache = new LRUCache<>(FIND_RESOURCES_CACHE_SIZE);
private Map<URI, IPath> fileSystemLocationCache = Collections
.synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
// Caches the result of new File(pathname).exists()
private LRUCache<IPath, Boolean> pathExistsCache = new LRUCache<>(FIND_RESOURCES_CACHE_SIZE);
private Map<IPath, Boolean> pathExistsCache = Collections
.synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
/** @since 8.2 */
protected EFSExtensionProvider efsProvider = null;