Bug 575483 - Eclipse may forget to build

hasBuildChanges should be volatile, setBuild() synchronized

Change-Id: I420925f064dd3f4c7ba08d1710a605f5da46c086
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.resources/+/184202
Reviewed-by: Jörg Kubitz <jkubitz-eclipse@gmx.de>
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkManager.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkManager.java
index b3c29f4..39d00ec 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkManager.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkManager.java
@@ -67,7 +67,7 @@
 	/**
 	 * Indicates whether any operations have run that may require a build.
 	 */
-	private boolean hasBuildChanges = false;
+	private volatile boolean hasBuildChanges;
 	private IJobManager jobManager;
 	/**
 	 * The primary workspace lock. This lock must be held by any thread
@@ -284,7 +284,7 @@
 	 * Indicates if the operation that has just completed may potentially
 	 * require a build.
 	 */
-	public void setBuild(boolean hasChanges) {
+	public synchronized void setBuild(boolean hasChanges) {
 		if (hasChanges && Policy.DEBUG_BUILD_NEEDED) {
 			Policy.debug("Set build hasChanges: " + hasChanges + " hasBuildChanges: " + hasBuildChanges); //$NON-NLS-1$ //$NON-NLS-2$
 			if (!hasBuildChanges && Policy.DEBUG_BUILD_NEEDED_STACK) {