diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/IMIConstants.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/IMIConstants.java index 5f672d4e89b..46c559832d0 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/IMIConstants.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/IMIConstants.java @@ -22,6 +22,16 @@ public interface IMIConstants * Preference key for default MI request timeout value. */ public static final String PREF_REQUEST_TIMEOUT = PLUGIN_ID + ".PREF_REQUEST_TIMEOUT"; //$NON-NLS-1$ + + /** + * Preference key for default MI launch request timeout value. + */ + public static final String PREF_REQUEST_LAUNCH_TIMEOUT = PLUGIN_ID + ".PREF_REQUEST_LAUNCH_TIMEOUT"; //$NON-NLS-1$ + + /** + * The default MI request timeout when no preference is set. + */ + public static final int DEF_REQUEST_LAUNCH_TIMEOUT = 30000; /** * The default MI request timeout when no preference is set. diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java index 425f28af4eb..0fc77d809e5 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java @@ -71,8 +71,8 @@ public class MIPlugin extends Plugin { * @throws MIException * @return MISession */ - public MISession createMISession(Process process, PTY pty, int timeout, int type) throws MIException { - return new MISession(process, pty, timeout, type); + public MISession createMISession(Process process, PTY pty, int timeout, int type, int launchTimeout) throws MIException { + return new MISession(process, pty, timeout, type, launchTimeout); } /** @@ -87,7 +87,8 @@ public class MIPlugin extends Plugin { MIPlugin plugin = getDefault(); Preferences prefs = plugin.getPluginPreferences(); int timeout = prefs.getInt(IMIConstants.PREF_REQUEST_TIMEOUT); - return createMISession(process, pty, timeout, type); + int launchTimeout = prefs.getInt(IMIConstants.PREF_REQUEST_LAUNCH_TIMEOUT); + return createMISession(process, pty, timeout, type, launchTimeout); } /** @@ -344,10 +345,15 @@ public class MIPlugin extends Plugin { syncStartup.start(); synchronized (pgdb) { - int timeout = getAdjustedTimeout(program); + MIPlugin plugin = getDefault(); + Preferences prefs = plugin.getPluginPreferences(); + int launchTimeout = prefs.getInt(IMIConstants.PREF_REQUEST_LAUNCH_TIMEOUT); + if (launchTimeout <= 0) { + launchTimeout = getAdjustedTimeout(program); + } while (syncStartup.isAlive()) { try { - pgdb.wait(timeout); + pgdb.wait(launchTimeout); break; } catch (InterruptedException e) { } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java index f2261add0b2..67cb613ab26 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java @@ -89,7 +89,7 @@ public class MISession extends Observable { * @param timeout time in milliseconds to wait for command response. * @param type the type of debugin session. */ - public MISession(Process process, PTY pty, int timeout, int type) throws MIException { + public MISession(Process process, PTY pty, int timeout, int type, int launchTimeout) throws MIException { gdbProcess = process; inChannel = process.getInputStream(); @@ -142,15 +142,15 @@ public class MISession extends Observable { // Like confirmation and screen size. MIGDBSet confirm = new MIGDBSet(new String[]{"confirm", "off"}); - postCommand(confirm); + postCommand(confirm, launchTimeout); confirm.getMIInfo(); MIGDBSet width = new MIGDBSet(new String[]{"width", "0"}); - postCommand(width); + postCommand(width, launchTimeout); confirm.getMIInfo(); MIGDBSet height = new MIGDBSet(new String[]{"height", "0"}); - postCommand(height); + postCommand(height, launchTimeout); confirm.getMIInfo(); }