diff options
author | Eugene Tarassov | 2012-03-15 19:05:21 +0000 |
---|---|---|
committer | Eugene Tarassov | 2012-03-15 19:05:21 +0000 |
commit | 74624200fcec0ba9f905478d02698c5edf6050d8 (patch) | |
tree | 231dc9be4369eeb92143de027655a3e24230baa6 | |
parent | af95b0d0180cc44e55e242a071adf4843b225f7d (diff) | |
download | org.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.
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; |