diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java index 3068a3700c8..97ee2e72a07 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java @@ -1154,10 +1154,9 @@ public class FileServiceSubSystem extends RemoteFileSubSystem implements IFileSe if (newConfig instanceof IFileServiceSubSystemConfiguration) { IHost host = getHost(); IFileServiceSubSystemConfiguration config = (IFileServiceSubSystemConfiguration) newConfig; - // file subsystem specific bits - synchronized (_cachedRemoteFiles){ - _cachedRemoteFiles.clear(); - } + + clearRemoteFileCache(); + _languageUtilityFactory = null; setFileService(config.getFileService(host)); setHostFileToRemoteFileAdapter(config.getHostFileAdapter()); diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileSubSystem.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileSubSystem.java index 6017406aea1..a4c8c9e61be 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileSubSystem.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileSubSystem.java @@ -124,9 +124,20 @@ public abstract class RemoteFileSubSystem extends SubSystem implements IRemoteFi protected ArrayList _searchHistory; /** - * All created IRemoteFiles are mapped in a cache for quick retrieval. - * This is a HashMap so any access to it needs to be synchronized otherwise - * thread-safety could be compromised. + * The _cachedRemoteFiles map is used to store queried IRemoteFiles + * for quick retrieval. This is a HashMap so any access to it needs + * to be synchronized; otherwise thread-safety could be compromised. + * + * The _cachedRemoteFiles HashMap should be synchronized on like this: + * + * synchronized (_cachedRemoteFiles){ + * // call to _cachedRemoteFiles + * ... + * } + * + * @deprecated going forward, this field will be non-API. A new + * protected clearRemoteFileCache() method allows cache + * clearing. */ protected HashMap _cachedRemoteFiles = new HashMap(); @@ -1394,6 +1405,15 @@ public abstract class RemoteFileSubSystem extends SubSystem implements IRemoteFi _cachedRemoteFiles.remove(path); } } + + /** + * @since 3.3 + */ + protected void clearRemoteFileCache(){ + synchronized (_cachedRemoteFiles){ + _cachedRemoteFiles.clear(); + } + } public void communicationsStateChange(CommunicationsEvent e)