Disassembly: Improve reliability of client-side address navigation
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java index 269700a..9444726 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java
@@ -1380,8 +1380,17 @@ */ @Override public final void gotoAddress(IAddress address) { + assert isGuiThread(); if (address != null) { - gotoAddress(address.getValue()); + final BigInteger addr = address.getValue(); + startUpdate(new Runnable() { + @Override + public void run() { + fGotoFramePending = false; + fGotoAddressPending = PC_UNKNOWN; + gotoAddress(addr); + } + }); } } @@ -1933,9 +1942,7 @@ final SafeRunnable safeUpdate = new SafeRunnable() { @Override public void run() { - if (updateCount == fUpdateCount && fViewer != null) { - update.run(); - } + update.run(); } @Override public void handleException(Throwable e) { @@ -1946,7 +1953,12 @@ invokeLater(new Runnable() { @Override public void run() { - SafeRunner.run(safeUpdate); + if (updateCount == fUpdateCount && fViewer != null) { + if (fUpdatePending) + invokeLater(this); + else + SafeRunner.run(safeUpdate); + } } }); } else {