Fix deadlock when the Select Connection dialog is up, user plugs in a device, and the Remote Connections view is shown
authorEd Swartz <ed.swartz@nokia.com>
Thu, 11 Feb 2010 10:41:44 -0600
changeset 924 657e34ac671f
parent 914 46f36a149510
child 930 82e9add879bf
Fix deadlock when the Select Connection dialog is up, user plugs in a device, and the Remote Connections view is shown
debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/status/ConnectionStatusReconciler.java
--- a/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/status/ConnectionStatusReconciler.java	Wed Feb 10 13:33:18 2010 -0600
+++ b/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/status/ConnectionStatusReconciler.java	Thu Feb 11 10:41:44 2010 -0600
@@ -20,6 +20,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PartInitException;
 
 import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator;
@@ -128,15 +130,28 @@
 	}
 
 	private void showConnectionsView() {
-		RunRunnableWhenWorkbenchVisibleJob.start(new Runnable() {
-			public void run() {
-				// try to show the connections view to start service testers
-				try {
-					WorkbenchUtils.getView(CONNECTIONS_VIEW_ID);
-				} catch (PartInitException e) {
+		// avoid deadlock if this called as a result of a launch sequence issuing a "select connection" dialog
+		Shell shell = WorkbenchUtils.getActiveShell();
+		if (shell == null || !shell.isVisible()) {
+			RunRunnableWhenWorkbenchVisibleJob.start(new Runnable() {
+				public void run() {
+					// try to show the connections view to start service testers
+					try {
+						WorkbenchUtils.getView(CONNECTIONS_VIEW_ID);
+					} catch (PartInitException e) {
+					}
 				}
-			}
-		});
+			});
+		} else {
+			Display.getDefault().asyncExec(new Runnable() {
+				public void run() {
+					try {
+						WorkbenchUtils.getView(CONNECTIONS_VIEW_ID);
+					} catch (PartInitException e) {
+					}
+				}
+			});
+		}
 	}
 	
 	private void reconcileAsCurrent(IConnection connection) {