Bug 180831 - [Forms] Crash during drawBackground when in advanced/antialiased mode
diff --git a/bundles/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/BusyIndicator.java b/bundles/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/BusyIndicator.java
index c416dfd..287cfe3 100644
--- a/bundles/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/BusyIndicator.java
+++ b/bundles/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/BusyIndicator.java
@@ -102,10 +102,12 @@
 
 		stop = false;
 		final Display display = getDisplay();
+		final Image offScreenImage = new Image(display,
+				loader.logicalScreenWidth,
+				loader.logicalScreenHeight);
+		final GC offScreenImageGC = new GC(offScreenImage);
 		busyThread = new Thread() {
 			private Image timage;
-			private Image offScreenImage;
-			private GC offScreenImageGC;
 
 			public void run() {
 				try {
@@ -113,12 +115,8 @@
 					 * Create an off-screen image to draw on, and fill it with
 					 * the shell background.
 					 */
-					offScreenImage = new Image(display,
-							loader.logicalScreenWidth,
-							loader.logicalScreenHeight);
-					offScreenImageGC = new GC(offScreenImage);
-					//FormUtil.setAntialias(offScreenImageGC, SWT.ON);
-					display.asyncExec(new Runnable() {
+					FormUtil.setAntialias(offScreenImageGC, SWT.ON);
+					display.syncExec(new Runnable() {
 						public void run() {
 							if (!isDisposed())
 								drawBackground(offScreenImageGC, 0, 0,
@@ -225,12 +223,16 @@
 					// Trace.trace(Trace.WARNING, "Busy error", e);
 					// //$NON-NLS-1$
 				} finally {
-					if (offScreenImage != null
-							&& !offScreenImage.isDisposed())
-						offScreenImage.dispose();
-					if (offScreenImageGC != null
-							&& !offScreenImageGC.isDisposed())
-						offScreenImageGC.dispose();
+					display.syncExec(new Runnable() {
+						public void run() {
+							if (offScreenImage != null
+									&& !offScreenImage.isDisposed())
+								offScreenImage.dispose();
+							if (offScreenImageGC != null
+									&& !offScreenImageGC.isDisposed())
+								offScreenImageGC.dispose();
+						}
+					});
 					if (timage != null && !timage.isDisposed())
 						timage.dispose();
 				}