Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Tarassov2012-03-15 19:05:21 +0000
committerEugene Tarassov2012-03-15 19:05:21 +0000
commit74624200fcec0ba9f905478d02698c5edf6050d8 (patch)
tree231dc9be4369eeb92143de027655a3e24230baa6
parentaf95b0d0180cc44e55e242a071adf4843b225f7d (diff)
downloadorg.eclipse.tcf-74624200fcec0ba9f905478d02698c5edf6050d8.tar.gz
org.eclipse.tcf-74624200fcec0ba9f905478d02698c5edf6050d8.tar.xz
org.eclipse.tcf-74624200fcec0ba9f905478d02698c5edf6050d8.zip
TCF Debugger: a better update logic for registers and expressions caches.
-rw-r--r--plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java18
-rw-r--r--plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java12
2 files changed, 19 insertions, 11 deletions
diff --git a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java
index 6304d427b..02bcccd69 100644
--- a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java
+++ b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java
@@ -324,17 +324,21 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor, ICastT
set(null, expression.getError(), null);
return true;
}
+ final TCFDataCache<?> cache = this;
IExpressions exps = launch.getService(IExpressions.class);
command = exps.evaluate(exp.expression.getID(), new IExpressions.DoneEvaluate() {
public void doneEvaluate(IToken token, Exception error, IExpressions.Value value) {
+ if (command != token) return;
+ command = null;
if (error != null) {
- Boolean b = usePrevValue(null);
- if (b != null && b) {
- set(token, null, prev_value);
+ Boolean b = usePrevValue(cache);
+ if (b == null) return;
+ if (b) {
+ set(null, null, prev_value);
return;
}
}
- set(token, error, value);
+ set(null, error, value);
}
});
return false;
@@ -566,12 +570,12 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor, ICastT
void onSuspended(boolean func_call) {
if (!func_call) {
prev_value = next_value;
- if (expression.isValid() && expression.getError() != null) expression.reset();
- value.reset();
type.reset();
type_name.reset();
- string.reset();
}
+ if (expression.isValid() && expression.getError() != null) expression.reset();
+ if (!func_call || value.isValid() && value.getError() != null) value.reset();
+ if (!func_call || string.isValid() && string.getError() != null) string.reset();
children.onSuspended(func_call);
// No need to post delta: parent posted CONTENT
}
diff --git a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java
index f9e22dfc5..512bdc28e 100644
--- a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java
+++ b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java
@@ -136,16 +136,20 @@ public class TCFNodeRegister extends TCFNode implements IElementEditor, IWatchIn
set(null, null, null);
return true;
}
+ final TCFDataCache<?> cache = this;
command = ctx.get(new IRegisters.DoneGet() {
public void doneGet(IToken token, Exception error, byte[] value) {
+ if (command != token) return;
+ command = null;
if (error != null) {
- Boolean b = usePrevValue(null);
- if (b != null && b) {
- set(token, null, prev_value);
+ Boolean b = usePrevValue(cache);
+ if (b == null) return;
+ if (b) {
+ set(null, null, prev_value);
return;
}
}
- set(token, error, value);
+ set(null, error, value);
}
});
return false;

Back to the top