View | Details | Raw Unified | Return to bug 199573
Collapse All | Expand All

(-)src/org/eclipse/rse/files/ui/resources/SystemTempFileListener.java (-10 / +16 lines)
Lines 17-22 Link Here
17
 * Martin Oberhuber (Wind River) - [186640] Add IRSESystemType.testProperty() 
17
 * Martin Oberhuber (Wind River) - [186640] Add IRSESystemType.testProperty() 
18
 * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
18
 * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
19
 * Martin Oberhuber (Wind River) - [189130] Move SystemIFileProperties from UI to Core
19
 * Martin Oberhuber (Wind River) - [189130] Move SystemIFileProperties from UI to Core
20
 * Martin Oberhuber (Wind River) - [199573] Fix potential threading issues in SystemTempFileListener
20
 ********************************************************************************/
21
 ********************************************************************************/
21
22
22
package org.eclipse.rse.files.ui.resources;
23
package org.eclipse.rse.files.ui.resources;
Lines 68-74 Link Here
68
{
69
{
69
	private ArrayList _changedResources;
70
	private ArrayList _changedResources;
70
	private ArrayList _ignoredFiles = new ArrayList();
71
	private ArrayList _ignoredFiles = new ArrayList();
71
	private boolean _isSynching;
72
	private volatile boolean _isSynching;
72
	private boolean _isEnabled;
73
	private boolean _isEnabled;
73
74
74
	public SystemTempFileListener()
75
	public SystemTempFileListener()
Lines 185-205 Link Here
185
		public IStatus runInUIThread(IProgressMonitor monitor)
186
		public IStatus runInUIThread(IProgressMonitor monitor)
186
		{
187
		{
187
			_isSynching = true;
188
			_isSynching = true;
188
			synchronized (_changedResources)
189
			try {
189
			{				
190
				IFile[] filesToSync;
191
				synchronized(_changedResources) {
192
					filesToSync = (IFile[])_changedResources.toArray(new IFile[_changedResources.size()]);
193
					_changedResources.clear();
194
				}
190
				SystemMessage msg = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_SYNCHRONIZE_PROGRESS);
195
				SystemMessage msg = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_SYNCHRONIZE_PROGRESS);
191
				monitor.beginTask(msg.getLevelOneText(), IProgressMonitor.UNKNOWN);
196
				monitor.beginTask(msg.getLevelOneText(), IProgressMonitor.UNKNOWN);
192
				setName(msg.getLevelOneText());
197
				setName(msg.getLevelOneText());
193
				for (int i = 0; i < _changedResources.size(); i++)
198
				for (int i = 0; i < filesToSync.length; i++)
194
				{
199
				{
195
					IFile file = (IFile) _changedResources.get(i);
200
					synchronizeTempWithRemote(filesToSync[i], monitor);
196
					synchronizeTempWithRemote(file, monitor);
197
				}
201
				}
202
			} finally {
203
				_isSynching = false;
198
				monitor.done();
204
				monitor.done();
199
200
				_changedResources.clear();
201
			}
205
			}
202
			_isSynching = false;
203
			return Status.OK_STATUS;
206
			return Status.OK_STATUS;
204
		}
207
		}
205
	}
208
	}
Lines 382-388 Link Here
382
						        ISubSystem ss = RSECorePlugin.getTheSystemRegistry().getSubSystem(ssStr);
385
						        ISubSystem ss = RSECorePlugin.getTheSystemRegistry().getSubSystem(ssStr);
383
						        if (doesHandle(ss))
386
						        if (doesHandle(ss))
384
						        {
387
						        {
385
						            _changedResources.add(resource);
388
						        	synchronized(_changedResources) {
389
						        		//avoid ConcurrentModificationException
390
							            _changedResources.add(resource);
391
						        	}
386
						        }
392
						        }
387
						    }
393
						    }
388
						}
394
						}

Return to bug 199573