Bug 506190 - AsyncExecTests.testCancelOnRequeue fails on all platforms

Change-Id: I791cc25bda44a2a7ce4e57cd2f5ab80ab221366b
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Worker.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Worker.java
index 724ca18..3582c1b 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Worker.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Worker.java
@@ -62,22 +62,25 @@
 	@Override
 	public void run(IProgressMonitor monitor) {
 		errors.clear();
-		SubMonitor pm = SubMonitor.convert(monitor, getTaskName(), 100);
+		SubMonitor progress = SubMonitor.convert(monitor, getTaskName(), 100);
 		try {
 			isWorking = true;
 			while (!work.isEmpty()) {
 				try {
-					performNextTask(pm);
-					checkCancelled(pm);
+					performNextTask(progress);
+					progress.checkCanceled();
+				} catch (OperationCanceledException e) {
+					// Only cancel all the work if the outer monitor is canceled.
+					progress.checkCanceled();
 				} catch (InterruptedException e) {
-					// Only cancel all the work if the outer monitor is canceled
-					checkCancelled(pm);
+					// Only cancel all the work if the outer monitor is canceled.
+					progress.checkCanceled();
 				} catch (InvocationTargetException e) {
 					handleError(e.getTargetException());
 				}
-				pm.setWorkRemaining(100);
+				progress.setWorkRemaining(100);
 			}
-			pm.done();
+			progress.done();
 		} catch (OperationCanceledException e) {
 			// The user chose to cancel
 			work.clear();
@@ -100,11 +103,6 @@
 		return errors.toArray(new Throwable[errors.size()]);
 	}
 
-	private void checkCancelled(SubMonitor pm) {
-		if (pm.isCanceled())
-			throw new OperationCanceledException();
-	}
-
 	protected String getTaskName() {
 		return taskName;
 	}