Changes to avoid excessive creation of Core worker jobs
in response to unnested calls to beginRule().
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSWorkspaceSubscriber.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSWorkspaceSubscriber.java
index 1ecf1b4..440752c 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSWorkspaceSubscriber.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSWorkspaceSubscriber.java
@@ -19,6 +19,7 @@
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.team.core.RepositoryProvider;
import org.eclipse.team.core.TeamException;
@@ -160,6 +161,10 @@
ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
final IProgressMonitor infinite = Policy.infiniteSubMonitorFor(monitor, 100);
try {
+ // We need to do a scheduling rule on the project because
+ // the EclipseSynchronizer currently obtains rules which causes
+ // many workers to be created (see bug 41979).
+ Platform.getJobManager().beginRule(resource);
infinite.beginTask(null, 512);
resource.accept(new IResourceVisitor() {
public boolean visit(IResource resource) throws CoreException {
@@ -180,6 +185,7 @@
} catch (CoreException e) {
throw CVSException.wrapException(e);
} finally {
+ Platform.getJobManager().endRule();
infinite.done();
}
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SubscriberEventHandler.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SubscriberEventHandler.java
index 0215c40..1207fb9 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SubscriberEventHandler.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SubscriberEventHandler.java
@@ -16,6 +16,7 @@
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.Job;
@@ -186,8 +187,11 @@
* the queue is empty.
*/
private void createEventHandlingJob() {
- eventHandlerJob = new Job(Policy.bind("SubscriberEventHandler.jobName")) {//$NON-NLS-1$
- public IStatus run(IProgressMonitor monitor) {
+ // We need to use a WorkspaceJob since
+ // the EclipseSynchronizer currently obtains rules which causes
+ // many workers to be created (see bug 41979).
+ eventHandlerJob = new WorkspaceJob(Policy.bind("SubscriberEventHandler.jobName")) {//$NON-NLS-1$
+ public IStatus runInWorkspace(IProgressMonitor monitor) {
return processEvents(monitor);
}
};