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 272528 | Differences between
and this patch

Collapse All | Expand All

(-)Eclipse UI Tests/org/eclipse/ui/tests/api/IWorkingSetManagerTest.java (+70 lines)
Lines 13-21 Link Here
13
import org.eclipse.core.resources.IWorkspace;
13
import org.eclipse.core.resources.IWorkspace;
14
import org.eclipse.core.resources.ResourcesPlugin;
14
import org.eclipse.core.resources.ResourcesPlugin;
15
import org.eclipse.core.runtime.IAdaptable;
15
import org.eclipse.core.runtime.IAdaptable;
16
import org.eclipse.core.runtime.IProgressMonitor;
17
import org.eclipse.core.runtime.IStatus;
18
import org.eclipse.core.runtime.Status;
19
import org.eclipse.core.runtime.jobs.Job;
16
import org.eclipse.jface.resource.ImageDescriptor;
20
import org.eclipse.jface.resource.ImageDescriptor;
17
import org.eclipse.jface.util.IPropertyChangeListener;
21
import org.eclipse.jface.util.IPropertyChangeListener;
18
import org.eclipse.jface.util.PropertyChangeEvent;
22
import org.eclipse.jface.util.PropertyChangeEvent;
23
import org.eclipse.swt.widgets.Display;
19
import org.eclipse.ui.IMemento;
24
import org.eclipse.ui.IMemento;
20
import org.eclipse.ui.IWorkbenchWindow;
25
import org.eclipse.ui.IWorkbenchWindow;
21
import org.eclipse.ui.IWorkingSet;
26
import org.eclipse.ui.IWorkingSet;
Lines 385-390 Link Here
385
		}
390
		}
386
	}
391
	}
387
392
393
	/*
394
	 * Not a definite test ,but a snippet to reproduce the bug 272528
395
	 */
396
	public void testConcurrentGetWorkingSets() throws Throwable {
397
		IWorkingSet[] testSets = new IWorkingSet[50];
398
		for (int i = 0; i < testSets.length; i++) {
399
			testSets[i] = fWorkingSetManager.createWorkingSet(i
400
					+ WORKING_SET_NAME_1 + i, new IAdaptable[0]);
401
			fWorkingSetManager.addWorkingSet(testSets[i]);
402
		}
403
		final String familyName = "testWorkingSetManagerThreadSafety";
404
		class WSetGetter extends Job {
405
			boolean done = false;
406
407
			WSetGetter() {
408
				super("WSetGetter");
409
				setSystem(true);
410
			}
411
412
			protected IStatus run(IProgressMonitor monitor) {
413
				try {
414
					for (int i = 0; i < 1000; i++) {
415
						fWorkingSetManager.getWorkingSets();
416
						if (i % 100 == 0) {
417
							Thread.yield();
418
						}
419
					}
420
				} finally {
421
					done = true;
422
				}
423
				return Status.OK_STATUS;
424
			}
425
426
			public boolean belongsTo(Object family) {
427
				return familyName == family;
428
			}
429
		}
430
		WSetGetter[] getters = new WSetGetter[10];
431
		for (int i = 0; i < getters.length; i++) {
432
			getters[i] = new WSetGetter();
433
		}
434
		try {
435
			for (int i = 0; i < getters.length; i++) {
436
				getters[i].schedule();
437
				fWorkingSetManager.getWorkingSets();
438
			}
439
440
			boolean sleep = true;
441
			while (sleep) {
442
				Thread.sleep(200);
443
				Display.getDefault().readAndDispatch();
444
				fWorkingSetManager.getWorkingSets();
445
				sleep = false;
446
				for (int i = 0; i < getters.length && !sleep; i++) {
447
					if (!getters[i].done) {
448
						sleep = true;
449
					}
450
				}
451
			}
452
		} finally {
453
			for (int i = 0; i < testSets.length; i++) {
454
				fWorkingSetManager.removeWorkingSet(testSets[i]);
455
			}
456
		}
457
	}
388
	/**
458
	/**
389
	 * @param setIds
459
	 * @param setIds
390
	 * @param i
460
	 * @param i

Return to bug 272528