1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-17 14:05:23 +02:00

[199573] Fix potential threading issues in SystemTempFileListener

This commit is contained in:
Martin Oberhuber 2007-08-10 14:17:45 +00:00
parent 7b51b729cd
commit 828af05a30

View file

@ -17,6 +17,7 @@
* Martin Oberhuber (Wind River) - [186640] Add IRSESystemType.testProperty() * Martin Oberhuber (Wind River) - [186640] Add IRSESystemType.testProperty()
* Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
* Martin Oberhuber (Wind River) - [189130] Move SystemIFileProperties from UI to Core * Martin Oberhuber (Wind River) - [189130] Move SystemIFileProperties from UI to Core
* Martin Oberhuber (Wind River) - [199573] Fix potential threading issues in SystemTempFileListener
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.files.ui.resources; package org.eclipse.rse.files.ui.resources;
@ -68,7 +69,7 @@ public abstract class SystemTempFileListener implements IResourceChangeListener
{ {
private ArrayList _changedResources; private ArrayList _changedResources;
private ArrayList _ignoredFiles = new ArrayList(); private ArrayList _ignoredFiles = new ArrayList();
private boolean _isSynching; private volatile boolean _isSynching;
private boolean _isEnabled; private boolean _isEnabled;
public SystemTempFileListener() public SystemTempFileListener()
@ -185,21 +186,23 @@ public abstract class SystemTempFileListener implements IResourceChangeListener
public IStatus runInUIThread(IProgressMonitor monitor) public IStatus runInUIThread(IProgressMonitor monitor)
{ {
_isSynching = true; _isSynching = true;
synchronized (_changedResources) try {
{ IFile[] filesToSync;
synchronized(_changedResources) {
filesToSync = (IFile[])_changedResources.toArray(new IFile[_changedResources.size()]);
_changedResources.clear();
}
SystemMessage msg = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_SYNCHRONIZE_PROGRESS); SystemMessage msg = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_SYNCHRONIZE_PROGRESS);
monitor.beginTask(msg.getLevelOneText(), IProgressMonitor.UNKNOWN); monitor.beginTask(msg.getLevelOneText(), IProgressMonitor.UNKNOWN);
setName(msg.getLevelOneText()); setName(msg.getLevelOneText());
for (int i = 0; i < _changedResources.size(); i++) for (int i = 0; i < filesToSync.length; i++)
{ {
IFile file = (IFile) _changedResources.get(i); synchronizeTempWithRemote(filesToSync[i], monitor);
synchronizeTempWithRemote(file, monitor);
}
monitor.done();
_changedResources.clear();
} }
} finally {
_isSynching = false; _isSynching = false;
monitor.done();
}
return Status.OK_STATUS; return Status.OK_STATUS;
} }
} }
@ -382,11 +385,14 @@ public abstract class SystemTempFileListener implements IResourceChangeListener
ISubSystem ss = RSECorePlugin.getTheSystemRegistry().getSubSystem(ssStr); ISubSystem ss = RSECorePlugin.getTheSystemRegistry().getSubSystem(ssStr);
if (doesHandle(ss)) if (doesHandle(ss))
{ {
synchronized(_changedResources) {
//avoid ConcurrentModificationException
_changedResources.add(resource); _changedResources.add(resource);
} }
} }
} }
} }
}
// KM - commenting out everything below to avoid doing checks as to whether // KM - commenting out everything below to avoid doing checks as to whether
// the file is opened in an editor. The check means that for cases // the file is opened in an editor. The check means that for cases