Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlain Magloire2004-11-24 22:01:05 +0000
committerAlain Magloire2004-11-24 22:01:05 +0000
commitc4a7c7ac9d495ae3470f90bc7d5b41a1f994b117 (patch)
treeff6369259dbbee441f3fa741a387582b1d71b70c
parent317776f4139513f5949f9077bdcf2af19330f8e4 (diff)
downloadorg.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
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/ChangeLog7
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java13
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java35
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()){

Back to the top