View | Details | Raw Unified | Return to bug 200997 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/core/tests/runtime/jobs/JobTest.java (-9 / +13 lines)
Lines 382-391 Link Here
382
	public void testCanceling() {
382
	public void testCanceling() {
383
		final TestBarrier barrier = new TestBarrier();
383
		final TestBarrier barrier = new TestBarrier();
384
		barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_START);
384
		barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_START);
385
		final boolean[] canceling = new boolean[] {false};
385
		final int[] canceling = new int[] {0};
386
		Job job = new Job("Testing#testCanceling") {
386
		Job job = new Job("Testing#testCanceling") {
387
			protected void canceling() {
387
			protected void canceling() {
388
				canceling[0] = true;
388
				canceling[0]++;
389
			}
389
			}
390
390
391
			protected IStatus run(IProgressMonitor monitor) {
391
			protected IStatus run(IProgressMonitor monitor) {
Lines 397-405 Link Here
397
		//schedule the job and wait on the barrier until it is running
397
		//schedule the job and wait on the barrier until it is running
398
		job.schedule();
398
		job.schedule();
399
		barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN);
399
		barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN);
400
		assertTrue("1.0", !canceling[0]);
400
		assertTrue("1.0", canceling[0] == 0);
401
		job.cancel();
401
		job.cancel();
402
		assertTrue("1.1", canceling[0]);
402
		assertTrue("1.1", canceling[0] == 1);
403
		job.cancel();
404
		assertTrue("1.2", canceling[0] == 1);
403
		//let the job finish
405
		//let the job finish
404
		barrier.setStatus(TestBarrier.STATUS_RUNNING);
406
		barrier.setStatus(TestBarrier.STATUS_RUNNING);
405
		waitForState(job, Job.NONE);
407
		waitForState(job, Job.NONE);
Lines 411-421 Link Here
411
	public void testCancelingByMonitor() {
413
	public void testCancelingByMonitor() {
412
		final TestBarrier barrier = new TestBarrier();
414
		final TestBarrier barrier = new TestBarrier();
413
		barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_START);
415
		barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_START);
414
		final boolean[] canceling = new boolean[] {false};
416
		final int[] canceling = new int[] {0};
415
		final IProgressMonitor[] jobmonitor = new IProgressMonitor[1];
417
		final IProgressMonitor[] jobmonitor = new IProgressMonitor[1];
416
		Job job = new Job("Testing#testCancelingByMonitor") {
418
		Job job = new Job("Testing#testCancelingByMonitor") {
417
			protected void canceling() {
419
			protected void canceling() {
418
				canceling[0] = true;
420
				canceling[0]++;
419
			}
421
			}
420
422
421
			protected IStatus run(IProgressMonitor monitor) {
423
			protected IStatus run(IProgressMonitor monitor) {
Lines 427-439 Link Here
427
		};
429
		};
428
		//run test twice to ensure job is left in a clean state after first cancelation
430
		//run test twice to ensure job is left in a clean state after first cancelation
429
		for (int i = 0; i < 2; i++) {
431
		for (int i = 0; i < 2; i++) {
430
			canceling[0] = false;
432
			canceling[0] = 0;
431
			//schedule the job and wait on the barrier until it is running
433
			//schedule the job and wait on the barrier until it is running
432
			job.schedule();
434
			job.schedule();
433
			barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN);
435
			barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN);
434
			assertTrue(Integer.toString(i) + ".1.0", !canceling[0]);
436
			assertEquals(Integer.toString(i) + ".1.0", 0, canceling[0]);
437
			jobmonitor[0].setCanceled(true);
438
			assertEquals(Integer.toString(i) + ".1.1", 1, canceling[0]);
435
			jobmonitor[0].setCanceled(true);
439
			jobmonitor[0].setCanceled(true);
436
			assertTrue(Integer.toString(i) + ".1.1", canceling[0]);
440
			assertEquals(Integer.toString(i) + ".1.2", 1, canceling[0]);
437
			//let the job finish
441
			//let the job finish
438
			barrier.setStatus(TestBarrier.STATUS_RUNNING);
442
			barrier.setStatus(TestBarrier.STATUS_RUNNING);
439
			waitForState(job, Job.NONE);
443
			waitForState(job, Job.NONE);
(-)src/org/eclipse/core/internal/jobs/JobManager.java (-1 / +1 lines)
Lines 263-269 Link Here
263
				if (!monitor.isCanceled())
263
				if (!monitor.isCanceled())
264
					monitor.setCanceled(true);
264
					monitor.setCanceled(true);
265
				job.canceling();
265
				job.canceling();
266
				job.setRunCanceled(false);
267
			}
266
			}
268
			return false;
267
			return false;
269
		}
268
		}
Lines 332-337 Link Here
332
				case Job.NONE :
331
				case Job.NONE :
333
					job.setStartTime(InternalJob.T_NONE);
332
					job.setStartTime(InternalJob.T_NONE);
334
					job.setWaitQueueStamp(InternalJob.T_NONE);
333
					job.setWaitQueueStamp(InternalJob.T_NONE);
334
					job.setRunCanceled(false);
335
				case InternalJob.BLOCKED :
335
				case InternalJob.BLOCKED :
336
					break;
336
					break;
337
				case Job.WAITING :
337
				case Job.WAITING :

Return to bug 200997