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);
 			}
 		};