### Eclipse Workspace Patch 1.0 #P org.eclipse.core.tests.runtime Index: src/org/eclipse/core/tests/runtime/jobs/JobTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobTest.java,v retrieving revision 1.38 diff -u -r1.38 JobTest.java --- src/org/eclipse/core/tests/runtime/jobs/JobTest.java 3 Oct 2008 22:09:01 -0000 1.38 +++ src/org/eclipse/core/tests/runtime/jobs/JobTest.java 7 Oct 2008 01:39:44 -0000 @@ -382,10 +382,10 @@ public void testCanceling() { final TestBarrier barrier = new TestBarrier(); barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_START); - final boolean[] canceling = new boolean[] {false}; + final int[] canceling = new int[] {0}; Job job = new Job("Testing#testCanceling") { protected void canceling() { - canceling[0] = true; + canceling[0]++; } protected IStatus run(IProgressMonitor monitor) { @@ -397,9 +397,11 @@ //schedule the job and wait on the barrier until it is running job.schedule(); barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN); - assertTrue("1.0", !canceling[0]); + assertTrue("1.0", canceling[0] == 0); job.cancel(); - assertTrue("1.1", canceling[0]); + assertTrue("1.1", canceling[0] == 1); + job.cancel(); + assertTrue("1.2", canceling[0] == 1); //let the job finish barrier.setStatus(TestBarrier.STATUS_RUNNING); waitForState(job, Job.NONE); @@ -411,11 +413,11 @@ public void testCancelingByMonitor() { final TestBarrier barrier = new TestBarrier(); barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_START); - final boolean[] canceling = new boolean[] {false}; + final int[] canceling = new int[] {0}; final IProgressMonitor[] jobmonitor = new IProgressMonitor[1]; Job job = new Job("Testing#testCancelingByMonitor") { protected void canceling() { - canceling[0] = true; + canceling[0]++; } protected IStatus run(IProgressMonitor monitor) { @@ -427,13 +429,15 @@ }; //run test twice to ensure job is left in a clean state after first cancelation for (int i = 0; i < 2; i++) { - canceling[0] = false; + canceling[0] = 0; //schedule the job and wait on the barrier until it is running job.schedule(); barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN); - assertTrue(Integer.toString(i) + ".1.0", !canceling[0]); + assertEquals(Integer.toString(i) + ".1.0", 0, canceling[0]); + jobmonitor[0].setCanceled(true); + assertEquals(Integer.toString(i) + ".1.1", 1, canceling[0]); jobmonitor[0].setCanceled(true); - assertTrue(Integer.toString(i) + ".1.1", canceling[0]); + assertEquals(Integer.toString(i) + ".1.2", 1, canceling[0]); //let the job finish barrier.setStatus(TestBarrier.STATUS_RUNNING); waitForState(job, Job.NONE); #P org.eclipse.core.jobs Index: src/org/eclipse/core/internal/jobs/JobManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java,v retrieving revision 1.30 diff -u -r1.30 JobManager.java --- src/org/eclipse/core/internal/jobs/JobManager.java 3 Oct 2008 22:08:46 -0000 1.30 +++ src/org/eclipse/core/internal/jobs/JobManager.java 7 Oct 2008 01:39:47 -0000 @@ -263,7 +263,6 @@ if (!monitor.isCanceled()) monitor.setCanceled(true); job.canceling(); - job.setRunCanceled(false); } return false; } @@ -332,6 +331,7 @@ case Job.NONE : job.setStartTime(InternalJob.T_NONE); job.setWaitQueueStamp(InternalJob.T_NONE); + job.setRunCanceled(false); case InternalJob.BLOCKED : break; case Job.WAITING :