Bug 296822 NullProgressMonitor is not thread safe for expected usage
NullProgressMonitor.setCanceled and isCanceled access the cancelled field, but there's no synchronization. The expected use is that setCanceled is called from a thread other than the one doing the work, which polls isCanceled(), so this needs to be thread safe. Could either make these two methods synchronized or make the field volatile. Should check other progress monitor implementations too.
bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java
/**
	 * The cursor used in the cancel button;
	 */
	protected Cursor arrowCursor;
	/**
	 * The cursor used in the shell;
	 */
	private Cursor waitCursor;
	/**
	 * Flag indicating whether to open or merely create the dialog before run.
	 */
	private boolean openOnRun = true;
	/**
	 * Internal progress monitor implementation.
	 */
	private class ProgressMonitor implements IProgressMonitorWithBlocking {
		private String fSubTask = "";
		private boolean fIsCanceled;
		/**
		 * is the process forked
		 */
		protected boolean forked = false;
		/**
		 * is locked
		 */
		protected boolean locked = false;
		public void beginTask(String name, int totalWork) {
			if (progressIndicator.isDisposed()) {
				return;
			}