diff options
author | Warren Paul | 2008-04-24 20:46:22 +0000 |
---|---|---|
committer | Warren Paul | 2008-04-24 20:46:22 +0000 |
commit | 0aa67427b4d5001c20a5c8219e73eac63c9292a9 (patch) | |
tree | a2150aec519a715b3450c3776442cc3f517b3d05 /debug | |
parent | 2044602e4b29d8f4734acd802e7c9d6b79c362ce (diff) | |
download | org.eclipse.cdt-0aa67427b4d5001c20a5c8219e73eac63c9292a9.tar.gz org.eclipse.cdt-0aa67427b4d5001c20a5c8219e73eac63c9292a9.tar.xz org.eclipse.cdt-0aa67427b4d5001c20a5c8219e73eac63c9292a9.zip |
synchronize the building of the exe's list.
Diffstat (limited to 'debug')
2 files changed, 50 insertions, 45 deletions
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/ExecutablesManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/ExecutablesManager.java index e0df32632bf..bccdd61886e 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/ExecutablesManager.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/ExecutablesManager.java @@ -100,24 +100,28 @@ public class ExecutablesManager extends PlatformObject { if (tempDisableRefresh) { return Status.OK_STATUS; } - - ArrayList<Executable> oldList = executables; - executables = new ArrayList<Executable>(); - synchronized (executableProviders) { - monitor.beginTask("Refresh Executables", executableProviders.size()); - for (IExecutableProvider provider : executableProviders) { - executables.addAll(provider.getExecutables(new SubProgressMonitor(monitor, 1))); + + synchronized (executables) { + ArrayList<Executable> oldList = new ArrayList<Executable>(executables); + executables.clear(); + + synchronized (executableProviders) { + monitor.beginTask("Refresh Executables", executableProviders.size()); + for (IExecutableProvider provider : executableProviders) { + executables.addAll(provider.getExecutables(new SubProgressMonitor(monitor, 1))); + } + monitor.done(); } - monitor.done(); - } - refreshNeeded = false; + refreshNeeded = false; - synchronized (changeListeners) { - for (IExecutablesChangeListener listener : changeListeners) { - listener.executablesChanged(new ExecutablesChangeEvent(oldList, executables) { - }); + synchronized (changeListeners) { + for (IExecutablesChangeListener listener : changeListeners) { + listener.executablesChanged(new ExecutablesChangeEvent(oldList, executables) { + }); + } } } + return monitor.isCanceled() ? Status.CANCEL_STATUS : Status.OK_STATUS; } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/StandardExecutableProvider.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/StandardExecutableProvider.java index cdb81086350..457250812a7 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/StandardExecutableProvider.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/StandardExecutableProvider.java @@ -123,43 +123,44 @@ public class StandardExecutableProvider implements IResourceChangeListener, ICPr } public Collection<Executable> getExecutables(IProgressMonitor monitor) { - executables.clear(); - - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - IProject[] projects = root.getProjects(); - - monitor.beginTask("Checking C/C++ Projects", projects.length); - - for (IProject project : projects) { - - if (monitor.isCanceled()) - break; - - try { - if (CoreModel.hasCNature(project)) { - CModelManager manager = CModelManager.getDefault(); - ICProject cproject = manager.create(project); - try { - IBinary[] binaries = cproject.getBinaryContainer().getBinaries(); - for (IBinary binary : binaries) { - if (binary.isExecutable() || binary.isSharedLib()) { - IPath exePath = binary.getResource().getLocation(); - if (exePath == null) - exePath = binary.getPath(); - Executable exe = new Executable(exePath, project, binary.getResource()); - executables.add(exe); + synchronized (executables) { + executables.clear(); + + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + IProject[] projects = root.getProjects(); + + monitor.beginTask("Checking C/C++ Projects", projects.length); + + for (IProject project : projects) { + + if (monitor.isCanceled()) + break; + + try { + if (CoreModel.hasCNature(project)) { + CModelManager manager = CModelManager.getDefault(); + ICProject cproject = manager.create(project); + try { + IBinary[] binaries = cproject.getBinaryContainer().getBinaries(); + for (IBinary binary : binaries) { + if (binary.isExecutable() || binary.isSharedLib()) { + IPath exePath = binary.getResource().getLocation(); + if (exePath == null) + exePath = binary.getPath(); + Executable exe = new Executable(exePath, project, binary.getResource()); + executables.add(exe); + } } + } catch (CModelException e) { } - } catch (CModelException e) { } + } catch (Exception e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); + monitor.worked(1); } - monitor.worked(1); + monitor.done(); } - monitor.done(); - return executables; } |