diff options
author | Alain Magloire | 2004-11-24 22:01:05 +0000 |
---|---|---|
committer | Alain Magloire | 2004-11-24 22:01:05 +0000 |
commit | c4a7c7ac9d495ae3470f90bc7d5b41a1f994b117 (patch) | |
tree | ff6369259dbbee441f3fa741a387582b1d71b70c | |
parent | 317776f4139513f5949f9077bdcf2af19330f8e4 (diff) | |
download | org.eclipse.cdt-c4a7c7ac9d495ae3470f90bc7d5b41a1f994b117.tar.gz org.eclipse.cdt-c4a7c7ac9d495ae3470f90bc7d5b41a1f994b117.tar.xz org.eclipse.cdt-c4a7c7ac9d495ae3470f90bc7d5b41a1f994b117.zip |
2004-11-24 Alain Magloire
Make the terminate() more responsive when gdb is shuting down.
See long discussion part of the 77435 fixes and 40087.
* cdi/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java
* mi/org/eclipse/cdt/debug/core/MIInferior.java
3 files changed, 40 insertions, 15 deletions
diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index 79b96ac3da9..8cc72dad11a 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,10 @@ +2004-11-24 Alain Magloire + Make the terminate() more responsive when gdb is shuting down. + See long discussion part of the 77435 fixes and 40087. + + * cdi/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java + * mi/org/eclipse/cdt/debug/core/MIInferior.java + 2004-11-23 Alain Magloire Tentative fix for 77435 * cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java index 5cb5914f68e..df25bc87482 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java @@ -120,15 +120,24 @@ public class ExpressionManager extends Manager { String varName = variable.getMIVar().getVarName(); MIVarChange[] changes = noChanges; MIVarUpdate update = factory.createMIVarUpdate(varName); + MIVarUpdateInfo info = null; try { mi.postCommand(update); - MIVarUpdateInfo info = update.getMIVarUpdateInfo(); + } catch (MIException e) { + throw new MI2CDIException(e); + } + boolean timedout = false; + try { + info = update.getMIVarUpdateInfo(); if (info == null) { + timedout = true; throw new CDIException(CdiResources.getString("cdi.Common.No_answer")); //$NON-NLS-1$ } changes = info.getMIVarChanges(); } catch (MIException e) { - //throw new MI2CDIException(e); + if (timedout) { + throw new MI2CDIException(e); + } eventList.add(new MIVarDeletedEvent(mi, varName)); } for (int j = 0; j < changes.length; j++) { diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java index 273e9cbd648..7cbcf189c17 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java +++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java @@ -35,6 +35,7 @@ public class MIInferior extends Process { boolean connected = false; + boolean exitCodeKnown = false; int exitCode = 0; int state = 0; @@ -132,14 +133,17 @@ public class MIInferior extends Process { public int exitValue() { if (isTerminated()) { if (!session.isTerminated()) { - CommandFactory factory = session.getCommandFactory(); - MIGDBShowExitCode code = factory.createMIGDBShowExitCode(); - try { - session.postCommand(code); - MIGDBShowExitCodeInfo info = code.getMIGDBShowExitCodeInfo(); - exitCode = info.getCode(); - } catch (MIException e) { - // no rethrown. + if (!exitCodeKnown) { + CommandFactory factory = session.getCommandFactory(); + MIGDBShowExitCode code = factory.createMIGDBShowExitCode(); + try { + session.postCommand(code); + MIGDBShowExitCodeInfo info = code.getMIGDBShowExitCodeInfo(); + exitCode = info.getCode(); + } catch (MIException e) { + // no rethrown. + } + exitCodeKnown = true; } } return exitCode; @@ -174,11 +178,16 @@ public class MIInferior extends Process { } int token = 0; if (isSuspended()) { - CommandFactory factory = session.getCommandFactory(); - MIExecAbort abort = factory.createMIExecAbort(); - session.postCommand0(abort, session.getCommandTimeout()); - abort.getMIInfo(); - token = abort.getToken(); + try { + CommandFactory factory = session.getCommandFactory(); + MIExecAbort abort = factory.createMIExecAbort(); + session.postCommand0(abort, -1); + // do not wait for the answer. + //abort.getMIInfo(); + token = abort.getToken(); + } catch (MIException e) { + // ignore the error + } } setTerminated(token, true); } else if (session.isCoreSession() && !isTerminated()){ |