From 99bab2981325bb9155875fa7b555b7cd2b2b52fd Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Tue, 21 Oct 2014 10:45:18 -0400 Subject: [PATCH] Bug: 448093 Move the initialization of the launch bar manager to job We've seen a deadlock during startup mainly caused by CDT but triggered when the launch bar manager initialized. This moves the init to a job where it should be anyway to ensure smooth startup. Change-Id: Id4b63e07dca3f96c561d6b4f45d60cf7cbcf530c Reviewed-on: https://git.eclipse.org/r/35235 Tested-by: Hudson CI Reviewed-by: Doug Schaefer --- .../core/internal/LaunchBarManagerTest.java | 20 +++++++++++++++++++ .../core/internal/LaunchBarManager.java | 20 ++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/launch/org.eclipse.cdt.launchbar.core.tests/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManagerTest.java b/launch/org.eclipse.cdt.launchbar.core.tests/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManagerTest.java index 1aa0f9024e7..e62b33142a3 100644 --- a/launch/org.eclipse.cdt.launchbar.core.tests/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManagerTest.java +++ b/launch/org.eclipse.cdt.launchbar.core.tests/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManagerTest.java @@ -62,11 +62,31 @@ public class LaunchBarManagerTest extends TestCase { public class TestLaunchBarManager extends LaunchBarManager { private ILaunchMode[] defaultLaunchModes; + boolean done; public TestLaunchBarManager() throws CoreException { super(); + // For the tests, need to wait until the init is done + synchronized (this) { + while (!done) { + try { + wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } } + @Override + public void init() throws CoreException { + super.init(); + synchronized (this) { + done = true; + notify(); + } + } + @Override public IExtensionPoint getExtensionPoint() throws CoreException { // default things diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java index 18201f7ca8c..8afe127916d 100644 --- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java +++ b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java @@ -33,9 +33,13 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ISafeRunnable; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.SafeRunner; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.debug.core.DebugPlugin; @@ -227,7 +231,21 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchConfiguration private static final String PREF_ACTIVE_LAUNCH_TARGET = "activeLaunchTarget"; private static final String PREF_CONFIG_DESC_ORDER = "configDescList"; - public LaunchBarManager() throws CoreException { + public LaunchBarManager() { + new Job("Launch Bar Initialization") { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + init(); + return Status.OK_STATUS; + } catch (CoreException e) { + return e.getStatus(); + } + } + }.schedule(); + } + + public void init() throws CoreException { // Fetch the desc order before the init messes it up IEclipsePreferences store = getPreferenceStore(); String configDescIds = store.get(PREF_CONFIG_DESC_ORDER, "");