1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 18:56:02 +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.net.URISyntaxException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
@ -94,11 +95,12 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
private static final int FIND_RESOURCES_CACHE_SIZE = 100; private static final int FIND_RESOURCES_CACHE_SIZE = 100;
private LRUCache<URI, IResource[]> workspaceRootFindContainersForLocationURICache = new LRUCache<>( private Map<URI, IResource[]> workspaceRootFindContainersForLocationURICache = Collections
FIND_RESOURCES_CACHE_SIZE); .synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
private LRUCache<URI, IResource[]> workspaceRootFindFilesForLocationURICache = new LRUCache<>( private Map<URI, IResource[]> workspaceRootFindFilesForLocationURICache = Collections
FIND_RESOURCES_CACHE_SIZE); .synchronizedMap(new LRUCache<>(FIND_RESOURCES_CACHE_SIZE));
private HashMap<IProject, LRUCache<IPath, List<IResource>>> findPathInProjectCache = new HashMap<>(); private Map<IProject, LRUCache<IPath, List<IResource>>> findPathInProjectCache = Collections
.synchronizedMap(new HashMap<>());
//String pathStr, URI baseURI -> URI //String pathStr, URI baseURI -> URI
private static class MappedURIKey { private static class MappedURIKey {
@ -144,11 +146,14 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
} }
// Caches the result of determineMappedURI // 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 // 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() // 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 */ /** @since 8.2 */
protected EFSExtensionProvider efsProvider = null; protected EFSExtensionProvider efsProvider = null;