Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 68452 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/core/internal/jobs/InternalJob.java (+9 lines)
Lines 31-36 Link Here
31
	 */
31
	 */
32
	static final int ABOUT_TO_RUN = 0x10;
32
	static final int ABOUT_TO_RUN = 0x10;
33
33
34
	/** 
35
	 * Job state code (value 32) indicating that a job has passed scheduling
36
	 * precondition checks and is about to be added to the wait queue. From an API point of view, 
37
	 * this is the same as NONE.
38
	 */
39
	static final int ABOUT_TO_SCHEDULE = 0x20;
40
34
	//flag mask bits
41
	//flag mask bits
35
	private static final int M_STATE = 0xFF;
42
	private static final int M_STATE = 0xFF;
36
	private static final int M_SYSTEM = 0x0100;
43
	private static final int M_SYSTEM = 0x0100;
Lines 208-213 Link Here
208
				return Job.WAITING;
215
				return Job.WAITING;
209
			case ABOUT_TO_RUN :
216
			case ABOUT_TO_RUN :
210
				return Job.RUNNING;
217
				return Job.RUNNING;
218
			case ABOUT_TO_SCHEDULE:
219
				return Job.NONE;
211
			default :
220
			default :
212
				return state;
221
				return state;
213
		}
222
		}
(-)src/org/eclipse/core/internal/jobs/JobManager.java (-2 / +10 lines)
Lines 217-222 Link Here
217
			//			System.out.println("changeState (" + job + "): " + printState(oldState) +"->" + printState(newState));
217
			//			System.out.println("changeState (" + job + "): " + printState(oldState) +"->" + printState(newState));
218
			switch (oldState) {
218
			switch (oldState) {
219
				case Job.NONE :
219
				case Job.NONE :
220
				case InternalJob.ABOUT_TO_SCHEDULE:
220
					break;
221
					break;
221
				case InternalJob.BLOCKED :
222
				case InternalJob.BLOCKED :
222
					//remove this job from the linked list of blocked jobs
223
					//remove this job from the linked list of blocked jobs
Lines 260-265 Link Here
260
					job.setStartTime(InternalJob.T_NONE);
261
					job.setStartTime(InternalJob.T_NONE);
261
					running.add(job);
262
					running.add(job);
262
					break;
263
					break;
264
				case InternalJob.ABOUT_TO_SCHEDULE:
265
					break;
263
				default :
266
				default :
264
					Assert.isLegal(false, "Invalid job state: " + job + ", state: " + newState); //$NON-NLS-1$ //$NON-NLS-2$
267
					Assert.isLegal(false, "Invalid job state: " + job + ", state: " + newState); //$NON-NLS-1$ //$NON-NLS-2$
265
			}
268
			}
Lines 285-291 Link Here
285
	protected IProgressMonitor createMonitor(InternalJob job, IProgressMonitor group, int ticks) {
288
	protected IProgressMonitor createMonitor(InternalJob job, IProgressMonitor group, int ticks) {
286
		synchronized (lock) {
289
		synchronized (lock) {
287
			//group must be set before the job is scheduled
290
			//group must be set before the job is scheduled
288
			if (job.internalGetState() != Job.NONE)
291
			//this includes the ABOUT_TO_SCHEDULE state, during which it is still
292
			//valid to set the progress monitor
293
			if (job.getState() != Job.NONE)
289
				return null;
294
				return null;
290
			IProgressMonitor monitor = null;
295
			IProgressMonitor monitor = null;
291
			if (progressProvider != null)
296
			if (progressProvider != null)
Lines 792-799 Link Here
792
				return;
797
				return;
793
			}
798
			}
794
			//can't schedule a job that is waiting or sleeping
799
			//can't schedule a job that is waiting or sleeping
795
			if (job.getState() != Job.NONE)
800
			if (job.internalGetState() != Job.NONE)
796
				return;
801
				return;
802
			//remember that we are about to schedule the job
803
			//to prevent multiple schedule attempts from succeeding (bug 68452)
804
			changeState(job, InternalJob.ABOUT_TO_SCHEDULE);
797
		}
805
		}
798
		//notify listeners outside sync block
806
		//notify listeners outside sync block
799
		jobListeners.scheduled((Job) job, delay, reschedule);
807
		jobListeners.scheduled((Job) job, delay, reschedule);

Return to bug 68452